java两个List对比根据某几个属性相同进行去重

本文介绍了一种在Java中对List<Map>类型的数据进行去重的方法,重点讲解了如何通过比较Map中的特定键值对来识别并去除重复项,避免了不必要的循环比较,提高了效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在实际应用中总会有那个几个蛋疼的场景,其中之一就是要根据某几个属性相同来定义为重复,进行List去重,不想重复循环比较

List<Map> list1 = new ArrayList<>();
List<Map> list2 = new ArrayList<>();
List<Map> list3 = new ArrayList<>();
Map map1 = new HashMap();
map1.put("sku","1" );
map1.put("businessLine","1" );
map1.put("warehouseCode","1" );
Map map2 = new HashMap();
map2.put("sku","2" );
map2.put("businessLine","2" );
map2.put("warehouseCode","2" );
Map map3 = new HashMap();
map3.put("sku","3" );
map3.put("businessLine","3" );
map3.put("warehouseCode","3" );
Map map4 = new HashMap();
map4.put("sku","2" );
map4.put("businessLine","2" );
map4.put("warehouseCode","2" );
map4.put("code","2" );
Map map5 = new HashMap();
map5.put("sku","3" );
map5.put("businessLine","3" );
map5.put("warehouseCode","3" );
map5.put("code","2" );

list1.add(map1);
list1.add(map2);
list1.add(map3);
list2.add(map4);
list2.add(map5);
  # 循环要排除的List 取出要 

  list2.forEach(x->{
            Map map = new HashMap();
            map.put("sku", x.get("sku"));
            map.put("businessLine", x.get("businessLine"));
            map.put("warehouseCode", x.get("warehouseCode"));
            list3.add(map);
        });
        System.out.println(list3.toString());
        list1.removeAll(list3);
// 使用filter  

for (Map map : list2) {
            list1 = list1.stream().filter(x->!(map.get("sku").equals(x.get("sku"))&&map.get("businessLine").equals(x.get("businessLine"))&&map.get("warehouseCode").equals(x.get("warehouseCode")))).collect(Collectors.toList());
        }
        System.out.println(list1.toString());
# 使用removerIf方法

for (Map map : list2) {
            list1.removeIf(x->(map.get("sku").equals(x.get("sku"))&&map.get("businessLine").equals(x.get("businessLine"))&&map.get("warehouseCode").equals(x.get("warehouseCode"))));
        }
# 返回结果
[{businessLine=1, sku=1, warehouseCode=1}]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值