对象按多种属性去重stream流
@Test
public void dome10() {
List<ExportTemperatureDto> temperatureList = new ArrayList<>();
temperatureList.add(new ExportTemperatureDto(1, "haha","1"));
temperatureList.add(new ExportTemperatureDto(2, "haha","2"));
temperatureList.add(new ExportTemperatureDto(3, "北京市","3"));
temperatureList.add(new ExportTemperatureDto(4, "haha","4"));
temperatureList.add(new ExportTemperatureDto(1, "haha","5"));
temperatureList.add(new ExportTemperatureDto(2, "haha","6"));
temperatureList.add(new ExportTemperatureDto(3, "haha","null"));
temperatureList.add(new ExportTemperatureDto(4, "haha","null"));
temperatureList.add(new ExportTemperatureDto(5, "haha","null"));
List<ExportTemperatureDto> result = temperatureList.stream()
.collect(collectingAndThen(toCollection(
() -> new TreeSet<>(comparing(s->s.getPersonId()+";"+s.getName()))), ArrayList::new));
result.forEach(System.out::println);
System.out.println("===============");
}
对象按多种属性去重set集合
Set<ExportTemperatureDto> set = new TreeSet<>(new Comparator<ExportTemperatureDto>() {
@Override
public int compare(ExportTemperatureDto t1, ExportTemperatureDto t2) {
int count = 1;
if(StringUtils.equals(t1.getPersonId(), t2.getUsername()) &&
StringUtils.equals(t1.getPassword(),t2.getPassword())){
count = 0;
}
return count;
}
});
set.addAll(list);
System.out.println("________________");
for(User u : set){
System.out.println("去重后的数据" + u);
}
BigDecimal计算
List<User> users = new ArrayList<>();
users.add(new User("1",5,BigDecimal.ONE));
users.add(new User("1",5,BigDecimal.ONE));
users.add(new User("1",5,BigDecimal.ONE));
users.add(new User("1",5,BigDecimal.ONE));
users.add(new User("1",null,BigDecimal.ONE));
users.add(new User("1",5,BigDecimal.ONE));
BigDecimal reduce = users.stream().filter(s->!Objects.isNull(s.getSerialNo())).map(User::getSerialNo).map(BigDecimal::new).reduce(BigDecimal.ZERO, BigDecimal::add);
System.out.println("reduce = " + reduce);
System.out.println("end");