使用stream合并list里边具有相同特性的对象的某一项值

有个对象,具有唯一列id,还有计数列count,想合并集合中的id相同的值,并计算count,对象如下:

@Getter
@Setter
public class UserKeyword {

    private String id;

    private Integer keywordId;

    private String keywordName;

    private Long userId;

    private Integer count;

    private BigDecimal weight;

}

做法一:

 Map<String, UserKeyword> map=new HashMap<>();
 list.forEach(o->{
      String key=o.getId();
      UserKeyword userKeyword = map.get(key);
      if (!Objects.isNull(userKeyword)) {
          o.setCount(o.getCount() + userKeyword.getCount());
      }
      map.put(key,o);
  });
list=new ArrayList<>(map.values());

这个好理解,利用map的key唯一特性,遇到重复的更新
做法二:

list=list(Collectors.toList()).stream().collect(Collectors.toMap(UserKeyword::getId, a -> a, (o1, o2) -> {
            o1.setCount(o1.getCount() + o2.getCount());
            return o1;
 })).values())

自己测试

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值