【问题标题】:Find the min and max number from a Collection using Java streams使用 Java 流从集合中查找最小和最大数字
【发布时间】:2016-09-14 18:01:30
【问题描述】:

下面是代码 sn-p,正如预期的那样,它在编译时失败。

我真正想做的是使用流从所有列表中找到最小值和最大值。

public class Delete {

   public static void main(String[] args) {

      List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 677, 0);
      List<Integer> list1 = Arrays.asList(11, 12, 23, 34, 25, 77);
      List<Integer> list2 = Arrays.asList(12, 21, 30, 14, 25, 67);
      List<Integer> list3 = Arrays.asList(41, 25, 37, 84, 95, 7);

      List<List<Integer>> largeList = Arrays.asList(list, list1, list2, list3);

      System.out.println(largeList.stream().max(Integer::compare).get());
      System.out.println(largeList.stream().min(Integer::compare).get());
   }

}

【问题讨论】:

标签: java java-8 java-stream


【解决方案1】:

您必须将所有 Lists 的元素扁平化为一个 Stream&lt;Integer&gt; 才能使您的代码正常工作:

System.out.println(largeList.stream().flatMap(List::stream).max(Integer::compare).get());
System.out.println(largeList.stream().flatMap(List::stream).min(Integer::compare).get());

但是,这不是很有效,因为您处理 Lists 两次以找到 minmax,并且您可以通过使用在一次处理中获得相同的数据(以及更多) IntStream::summaryStatistics()

IntSummaryStatistics stats = largeList.stream().
                                      .flatMap(List::stream)
                                      .mapToInt(Integer::intValue)
                                      .summaryStatistics();
System.out.println(stats.getMin());
System.out.println(stats.getMax());

【讨论】:

  • IntSummaryStatistics。从来不知道那个班。 +1
  • 谢谢。我以为我在编辑时弄乱了你的答案。那是给同行评审员的注释。你的回答确实很有帮助。
【解决方案2】:

试试这个:

largeList.stream().flatMap(List::stream).max(Integer::compare).get();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    • 2020-01-12
    • 2014-08-03
    相关资源
    最近更新 更多