java - 根据多个字段过滤对象的 ArrayList
问题描述
所以这是我的课:
class A {
private int id;
private TimeStamp startDate;
private TimeStamp endDate;
private String source;
}
我有一个List<A> list1
因此,在此列表中,如果任何两个对象相同startDate
且相同,source
则我需要选择更高的对象endDate
。我怎样才能实现它?
我当前的实现:(它只检查startDate
而不是source
然后选择更高的endDate
值)
Collection<A> result =
list1.stream()
.collect(Collectors.toMap(A::getStartDate,
Function.identity(),
(a, b) -> a.getEndDate().after(b.getEndDate()) ? a : b))
.values();
我如何扩展此代码以检查源代码或任何其他实现来做同样的事情也很好......
解决方案
您可以添加一个基于andA
生成密钥的方法。然后你可以在:String
startDate
source
toMap
class A {
private int id;
private TimeStamp startDate;
private TimeStamp endDate;
private String source;
public String getKey() {
return this.startDate.toString() + source;
}
}
list1.stream()
.collect(Collectors.toMap(A::getKey,
Function.identity(),
(a, b) -> a.getEndDate().after(b.getEndDate()) ? a : b))
.values();
推荐阅读
- python - 将框架传递给另一个类
- react-leaflet - onClick 事件没有 Marker 最新的 props
- java - 当我多次使用相同的定位值时,骆驼绑定抛出空指针异常
- laravel - Flatpickr 创建额外的输入字段
- android - Moshi - 将字符串转换为对象
- excel - 如何解决 Power BI 错误 - 密钥与表中的任何行都不匹配
- composer-php - 在同一个 vc 位置使用多个私有仓库
- python - 打开从另一个 python 脚本导入的 python 文件
- xamarin.forms - 图像未以 Xamarin 形式显示
- google-bigquery - 执行变量值 Google BigQuery