下面是代码片段,正如预期的那样,在编译时失败了。
我真正想要做的是使用流找到所有列表中的最小值和最大值。
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());
}
}
答案 0 :(得分:8)
您必须将所有List
的元素展平为一个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());
这不是很有效,因为您处理List
两次以便找到min
和max
,并且您可以获得相同的数据(以及更多)使用IntStream::summaryStatistics()
进行单一处理:
IntSummaryStatistics stats = largeList.stream().
.flatMap(List::stream)
.mapToInt(Integer::intValue)
.summaryStatistics();
System.out.println(stats.getMin());
System.out.println(stats.getMax());
答案 1 :(得分:2)
试试这个:
largeList.stream().flatMap(List::stream).max(Integer::compare).get();