首页 > 解决方案 > 在嵌套列表中查找最小元素> 在 groovy 中使用收集?

问题描述

我已经编写了以下min在嵌套中定位元素的示例List<List<String>>,效果很好:

List<String> el0 = ["112", "2"]
List<String> el1 = ["11", "222", "45", "1"]
List<String> el2 = ["21", "112", "23"]

List<List<String>> container = new ArrayList<>()

container << el0
container << el1
container << el2

List<String> candidates = container.collect { it.min(new Comparator<String>() {
  @Override
  int compare(String o1, String o2) {
    return Integer.valueOf(o1) <=> Integer.valueOf(o2)

  }
}) }

String min = candidates.min()
println (min)

但是是否可以对上述相当冗长的示例进行优化/简化 - 假设元素需要是字符串(以及将来更复杂的对象)?

标签: groovy

解决方案


一种简化的方法可以在展平后在一次操作中定位最小值container(最小值减少只进行一次)。它看起来像:

String min = container.flatten().min{Integer.valueOf(it)}

可以看出,我还使用{Integer.valueOf(it)}闭包来实现Comparator<String>,您使用匿名类来实现。


推荐阅读