为了账号安全,请及时绑定邮箱和手机立即绑定

Java - 按属性组合和最近日期过滤对象列表

Java - 按属性组合和最近日期过滤对象列表

动漫人物 2021-11-24 19:07:24
我有一个包含属性名称、公司和日期的对象列表。我想过滤该列表以根据日期获取最新的名称+公司组合。示例数据:id | name | company | date---------------------- 1 | bob  |    A    | 01/2017 2 | bob  |    A    | 01/2016 3 | bob  |    A    | 01/2015 4 | bob  |    B    | 03/2017 5 | sal  |    B    | 04/2018 6 | sue  |    A    | 01/2016 7 | sue  |    A    | 01/2017 8 | sue  |    A    | 01/2015所需的结果应该是一个包含 ids 的列表:1、4、5 和 7。如果名称 + 公司组合不存在,我可以查看列表中的每个项目并将其添加到新列表中,如果存在,请检查日期以查看是否应替换现有的。但我觉得应该有一种更简单的方法来通过流和过滤器来做到这一点。我就是想不出来怎么办。搜索提供了诸如 Collections.max 之类的方法,但我想要一个基于组合的最大值列表。这些是 java 构造的对象,而不是持久化的实体,否则我会做这样的事情:GROUP BY with MAX(DATE)。但我想完成同样的事情。是否可以使用过滤器来做到这一点,还是我唯一的选择是长途?
查看完整描述

1 回答

?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

您想使用 Collectors API 中的 groupingBy 方法。它允许您提供一个基于流中对象创建键的功能,然后为您提供 Map>。你会得到一个类似的代码:


Function<YourObject, String> keyGen = o -> o.getName() + o.getCompany();

Comparator<YourObject> comp = (f1, f2) -> f1.date().compareTo(f2.getDate()

yourObjects.stream().collect(Collectors.groupingBy(keyGen)).values().stream().map(list -> Collections.max(list, comp)).map(MyObject::getId).collect(Collectors.toList());


查看完整回答
反对 回复 2021-11-24
  • 1 回答
  • 0 关注
  • 155 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信