gpt4 book ai didi

Java Streams 在同一个列表上循环两次

转载 作者:行者123 更新时间:2023-12-02 09:44:01 24 4
gpt4 key购买 nike

我是 java 8 的新手,由于某种原因,我在理解流时遇到了问题。假设我们有一个对象列表 List< MyObject >,其中 MyObject 有 2 个字段:Long Id、Date insertTime,并且我想删除具有相同 ID 和更早时间的元素。

使用 2 个 for 循环,它是这样的:

for(MyObject object : myObjects) {
for(MyObject tmpObject : myObjects) {
if(object.getId() == tmpObject.getId()) {
if(object.getInsertDate().after(tmpObject.getInsertDate()))
myObjects.remove(tmpObject);
else
myObjects.remove(object);
}
}
}

使用流时会是什么样子?

@Michael 我的错。我需要另一个列表或数组来存储响应数据。

假设我有

  1. 1234:1991 年 5 月 25 日
  2. 1235:1995年5月25日
  3. 1234:1999年5月25日

所以我需要结果

  1. 1235:1995年5月25日
  2. 1234:1999年5月25日

谢谢大家。

最佳答案

按 ID 分组,然后为每个 ID 选择插入日期最长的 ID。您可以将 Sample 替换为 MyObject。

    Map<Long, List<Sample>> map = list.stream().collect(Collectors.groupingBy(Sample::getId));
map.values().stream()
.map(samples -> Collections.max(
samples, Comparator.comparing(Sample::getInsertDate)))
.collect(Collectors.toList());

关于Java Streams 在同一个列表上循环两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51130976/

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