gpt4 book ai didi

java - 使用 Java 流从集合中查找最小和最大数字

转载 作者:行者123 更新时间:2023-12-02 11:15:36 25 4
gpt4 key购买 nike

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

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

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

}

最佳答案

您必须展平所有 List 的元素s 成单个 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 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());

这是自 Java 12 以来可用的另一个解决方案:

System.out.println (largeList.stream()
.flatMap(List::stream)
.collect(Collectors.teeing(
Collectors.maxBy (Integer::compare),
Collectors.minBy (Integer::compare),
List::of
)));

使用Collectors.teeing允许您申请两个 Collector相同Stream ,然后对两个 Collector 的结果做任何你想做的事s。在此示例中,第一个 Collector将计算最大元素,第二个 Collector将计算最小元素,并且这两个数字将被收集到一个 List 中。输出是 List<Optional<Integer>> ,其中第一个元素保存最大值,第二个元素保存最小值。

关于java - 使用 Java 流从集合中查找最小和最大数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39487418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com