使用Java流从集合中查找最小和最大数量

The*_*ode 2 java java-8 java-stream

下面是代码片段,正如预期的那样,在编译时失败.

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

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());
   }

}
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 8

您必须将所有Lists 的元素拼合为一个单元Stream<Integer>才能使代码正常工作:

System.out.println(largeList.stream().flatMap(List::stream).max(Integer::compare).get());
System.out.println(largeList.stream().flatMap(List::stream).min(Integer::compare).get());
Run Code Online (Sandbox Code Playgroud)

这是不是很有效,不过,因为你处理List的s阶两次找到既minmax,你可以得到相同的数据(及以上)通过在一个单一的处理IntStream::summaryStatistics():

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

  • `IntSummaryStatistics`.从来不知道那堂课.+1 (2认同)