场景:由于特定查询,将主键重复的但是其他部分属性的对象数据进行了合并,但是想要去重掉主键一样的数据。
实现方法:
public static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) { Map<Object, Boolean> seen = new ConcurrentHashMap<>(); return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; }
调用实现(伪代码):
List<ItemConditionDemandVo> demands=xxxxMapper.selectList(); List<ItemConditionDemandVo> otherDemands=xxxxMapper.selectList();
demands.addAll(otherDemands);
//上面数据有可能存在重复数据,去重
demands= demands.stream().filter(distinctByKey(b->b.getItemId())).collect(Collectors.toList());
测试好用