【发布时间】:2018-12-10 08:59:45
【问题描述】:
我是 java 8 的新手,由于某种原因我在理解流时遇到了问题。假设我们有一个对象列表 List
有 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 我的错。比我需要另一个列表或数组来存储响应数据。
假设我有
- 1234 : 25/5/1991
- 1235 : 25/5/1995
- 1234 : 25/5/1999
所以我需要结果
- 1235 : 25/5/1995
- 1234 : 25/5/1999
谢谢大家。
【问题讨论】:
-
“有 2 个 for 循环是这样的”恐怕不是,因为在迭代列表时无法从列表中删除。
-
附带说明,您应该始终在您的陈述中使用
{和},因为从长远来看,这会让您的生活更轻松。 -
@AxelH 我想
equals方法是错误的地方。 equals 方法应该为相同的 id(以及可选的相同日期)返回 true -
是的@Glains,我没有读到日期应该更早......所以它不正确。
-
您可以执行以下操作: List
> collect = list.stream().collect(groupingBy(MyObj::getId, maxBy(Comparator.comparing(MyObj::getDate) ))).values().stream().collect(toList());
标签: java loops java-8 nested java-stream