java 创建集合_java-从复杂列表创建的集合

因此,我有一个列表,其中包含来自数据库的具有相同“ Id”的重复实体(不是真正的Id,而是一种),但具有不同的CreatedDate.

因此,我想从重复项中获取具有最新CreatedDate的最新实体.

示例我有一个创建的用户列表:

RealId|CreatedDate|Id|Name

1|20170101|1|User1

2|20170102|1|User1Modified

3|20170103|2|User2

4|20170104|2|User2Modified

从该列表中获得最佳方法是:

RealId|CreatedDate|Id|Name

2|20170102|1|User1Modified

4|20170104|2|User2Modified

这是我的第一个主意

List r = query.getResultList();

Set distinct = r.stream().filter(x -> {

List clones = r.stream()

.filter(y -> y.getId() == x.getId())

.collect(Collectors.toList());

T max = clones.stream()

.max(Comparator.comparing(AbstractEntityHistory::getEntryDate))

.get();

return max.getNumber() == x.getNumber();

}).collect(Collectors.toSet());

我的另一个想法是使它按日期降序排列,然后像下面这样进行distinct().collect():

Set distinct2 = r.stream().sorted((x,y) -> {

if(x.getEntryDate().isBefore(y.getEntryDate())) {

return 1;

} else if(x.getEntryDate().isAfter(y.getEntryDate())) {

return -1;

} else {

return 0;

}

}).distinct().collect(Collectors.toSet());

在这里,T覆盖等于,如果它们相等则监视RealId,否则将使用反射来监视其他所有字段.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值