Java-Java集合流操作
作者:互联网
修订记录 | 版本 | 是否发布 |
---|---|---|
2020-01-25 | v1.0 | 是 |
2021-03-19 | v1.1 | 是 |
List分组
Map<String,List<ClassEntity>> = classEntities.stream().collect(Collectors.groupingBy(ClassEntity::getGrade));
List去重
1、单字段去重
petList = petList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(
() -> new TreeSet<>(Comparator.comparing(PetsPetInfo::getUserId))), ArrayList::new));
2、多字段去重
java8去重(根据年级和专业,当年级和专业都相同的情况下看做是重复数据)
List<ClassEntity> distinctClass = classEntities.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getProfessionId() + ";" + o.getGrade()))), ArrayList::new));
通过hashSet去重(如将classNames去重):该种去重是bean完全相同的时候算重复数据
List<String> classNameList = new ArrayList(new HashSet(classNames));
List交集方法retainAll
public class Test {
public static void main(String[] args) {
List<String> list1 = new ArrayList<String>();
List<String> list2 = new ArrayList<String>();
List<String> list3 = new ArrayList<String>();
for (int i = 0; i < 20; i++) {
list1.add(i+"");
if(i%2 == 0) {
list2.add(i+"");
}
list3.add(i+"@");
}
// list1 与 list2 存在相同元素,list1集合只保留list2中存在的元素
list1.retainAll(list2);
if(list1.isEmpty()) {
System.out.println("不包含");
} else {
System.out.println("包含");
}
System.out.println(list1);
// list1 与 list3 不存在相同元素,list1集合变为空
list1.retainAll(list3);
if(list1.isEmpty()) {
System.out.println("不包含");
} else {
System.out.println("包含");
}
System.out.println(list1);
}
}
分组去重获取最新记录
Listpublic static void main(String[] args) throws InterruptedException {
List<VehicleOrder> vehicleOrderBqList = Lists.newArrayList();
VehicleOrder v1 = new VehicleOrder();
v1.setDealerCode("BQ0062");
v1.setCustomerPhone("13101030009");
v1.setReceivedTotalMoney(new BigDecimal(0));
v1.setUpdateTime(DateUtils.getNowLocalDateTime());
Thread.sleep(2000);
VehicleOrder v2 = new VehicleOrder();
v2.setDealerCode("BQ0062");
v2.setCustomerPhone("13101030009");
v2.setReceivedTotalMoney(new BigDecimal(0));
v2.setUpdateTime(DateUtils.getNowLocalDateTime());
Thread.sleep(2000);
VehicleOrder v3 = new VehicleOrder();
v3.setDealerCode("BQ0062");
v3.setCustomerPhone("13101030009");
v2.setReceivedTotalMoney(new BigDecimal(100));
v3.setUpdateTime(DateUtils.getNowLocalDateTime());
Thread.sleep(2000);
VehicleOrder v4 = new VehicleOrder();
v4.setDealerCode("BQ0062");
v4.setCustomerPhone("13101030009");
v4.setReceivedTotalMoney(new BigDecimal(500));
v4.setUpdateTime(DateUtils.getNowLocalDateTime());
Thread.sleep(2000);
vehicleOrderBqList.add(v1);
vehicleOrderBqList.add(v2);
vehicleOrderBqList.add(v3);
vehicleOrderBqList.add(v4);
//方式一:分组随机去重
/* List<VehicleOrder> distinctList = vehicleOrderBqList.parallelStream()
.collect(Collectors.collectingAndThen(Collectors.toCollection(
() -> new TreeSet<>(Comparator.comparing(en -> en.getDealerCode() + ";" + en.getCustomerPhone()))),
ArrayList::new));*/
//方式二:分组去重,根据UpdateTime获取最新记录(去重规则)
List<VehicleOrder> distinctList = Lists.newArrayList();
distinctList = vehicleOrderBqList.parallelStream()
.collect(Collectors.groupingBy(en -> en.getDealerCode() + ";" + en.getCustomerPhone())).values()
.parallelStream().map(list -> list.parallelStream().max(Comparator.nullsLast(Comparator.comparing(VehicleOrder::getUpdateTime))).orElse(null)
).collect(Collectors.toList());
//方式三:分组去重,根据UpdateTime获取最新记录(去重规则)
/* vehicleOrderBqList.parallelStream()
.collect(Collectors.groupingBy(en -> en.getDealerCode() + ";" + en.getCustomerPhone())).forEach((k, v) -> {
VehicleOrder vvv = v.parallelStream()
.max(Comparator.nullsLast(Comparator.comparing(VehicleOrder::getUpdateTime))).orElse(null);
if (Optional.ofNullable(vvv).isPresent()) {
distinctList.add(vvv);
}
;
});*/
System.out.println(distinctList);
}
分组去重获取最新记录
List// 若value为空,设置默认值""
Map<String, String> map1 = list.stream().collect(
Collectors.toMap(i -> i.getName(), i-> Optional.ofNullable(i.getSex()).orElse(""), (v1, v2) -> v1));
// 调用hashMap putAll方法, 注意key相同时,value会覆盖。
Map<String, String> map2 = list.stream().collect(
HashMap::new, (m, i) -> m.put(i.getName(), i.getSex()), HashMap::putAll);
标签:Java,Collectors,list1,List,collect,VehicleOrder,new,集合,操作 来源: https://www.cnblogs.com/BCX-1024/p/javajava-ji-he-liu-cao-zuo.html