原因:因为Stream提供的distinct()方法只能去除重复的对象,无法根据指定的对象属性进行去重,可以应付简单场景。
解决方案:
//去重,共同信息保存到bizPledgeSupplierVOs里 bizPledgeSupplierAgentBos.stream().filter( distinctByKey(o -> o.getId()) ).forEach( p ->{ if(!StringUtil.isBlank( p.getProcessPerson() )){ BizPledgeSupplierVO vo = new BizPledgeSupplierVO(); BeanUtils.copyProperties( p , vo ); bizPledgeSupplierVOs.add( vo ); } } );
private <T> Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor) { Map<Object, Boolean> seen = new ConcurrentHashMap<>(); return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; }
对象list转map Map<String, PledgeManageVindicateBO> vindicateMap = vindicateBOS.stream(). collect(Collectors.toMap(PledgeManageVindicateBO::getCode, obj -> obj, (k1, k2) -> k1));