gpt4 book ai didi

Java Streams 按最小值/最大值过滤嵌套集合

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:03:46 25 4
gpt4 key购买 nike

我有一个 Map<Integer, List<MyDayObject>>表示一年中的所有日子。
现在我只需要分析每周产生最高值(value)的日子。我已经能够让嵌套流与 forEach 一起工作但我似乎无法正确地传输它和collect进入List在最后。

weeks.forEach((k, v) -> { 
MyDayObject highest = v.stream()
.max((o1, o2) -> o1.value().compareTo(o2.value())).get();
System.out.println(highest);
});

虽然我需要的不是打印它,而是得到一个 List<MyDayObject> allHighest在最后。

我试过了 .filter正在 .entrySet()通过 .max()但无法让它发挥作用。
过滤 Map 的最佳方法是什么?通过 max嵌套的 List

最佳答案

看来您需要将原始 Map 的每个值映射到相应的最大值 MyDayObject:

List<MyDayObject> allHighest = 
weeks.values() // produces a Collection<List<MyDayObject>>
.stream() // produces a Stream<List<MyDayObject>>
.map(list -> list.stream() // transforms each List<MyDayObject> to a MyDayObject
// to obtain a Stream<MyDayObject>
.max((o1, o2) -> o1.value().compareTo(o2.value())).get())
.collect(Collectors.toList()); // collects the elements to a List

附言我只是复制了您找到给定列表的最大元素的代码,而没有尝试对其进行改进,这可能是可能的。我专注于获得所需的输出。

正如holi-java评论的,比较元素的lambda表达式可以简化:

List<MyDayObject> allHighest = 
weeks.values()
.stream()
.map(list -> list.stream().max(Comparator.comparing(MyDayObject::value)).get())
.collect(Collectors.toList());

关于Java Streams 按最小值/最大值过滤嵌套集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43470648/

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