使用lambda操作集合

一.筛选过滤list

1.获取集合对象中的字段

1 List<DrugTemplateRecommend> drugTemplateRecommends = new ArrayList<>();
2 List<Long> orderTemplateDictIds = drugTemplateRecommends
3                 .stream().map(DrugTemplateRecommend::getDrugTemplateId).collect(Collectors.toList());

2.获取集合对象中的字段(去重)

1 List<DrugTemplateRecommend> drugTemplateRecommends = new ArrayList<>();
2 List<Long> orderTemplateDictIds = drugTemplateRecommends 
.stream().map(DrugTemplateRecommend::getDrugTemplateId).distinct().collect(Collectors.toList());
//排序并去重,解决字段为0时 去重失效的问题
dictOrderVsNetworkList= drugAndOrder.getDictOrderVsNetworkList().stream().collect(
collectingAndThen(
toCollection(() -> new TreeSet<>(comparing(DictOrderVsNetworkVO::getSelfBurdenRatio))), ArrayList::new))
.stream().sorted(Comparator.comparing(DictOrderVsNetworkVO::getSelfBurdenRatio)).collect(Collectors.toList());;

3.筛选集合中的对象

1 List<DrugTemplateRecommend> drugTemplateRecommends = new ArrayList<>();
2 List<DrugTemplateRecommend> mans = drugTemplateRecommends.stream().filter(j->j.getDrugTemplateId().equals(2)).collect(Collectors.toList());

二.遍历

1 List<DrugTemplateRecommend> drugTemplateRecommends = new ArrayList<>();
2 rugTemplateRecommends.forEach(DrugTemplateRecommend->{
3 //TODO
4             
5 });

三.根据对象中的某一属性,排序

1 List<DrugTemplateRecommend> drugTemplateRecommends = new ArrayList<>();
2 //根据对象中的drugTemplateCount字段,正序排序
3 List<DrugTemplateRecommend> sort = drugTemplateRecommends.stream().sorted(Comparator.comparing(DrugTemplateRecommend::getDrugTemplateCount)).collect(Collectors.toList());
2 //根据对象中的drugTemplateCount字段,正序排序  有null值时,把null值排到后面
3 List<DrugTemplateRecommend> sort = drugTemplateRecommends.stream().sorted(Comparator.comparing(DrugTemplateRecommend::getDrugTemplateCount
,Comparator.nullsLast(Integer::compareTo)
)).collect(Collectors.toList());
4 //根据对象中的drugTemplateCount字段,倒序排序 5 List<DrugTemplateRecommend> sort = drugTemplateRecommends.stream().sorted(Comparator.comparing(DrugTemplateRecommend::getDrugTemplateCount).reversed()).collect(Collectors.toList());

四.取最大最小值

1 List<DrugTemplateRecommend> drugTemplateRecommends = new ArrayList<>();
2 //根据drugTemplateCount字段,取出集合中的最大值
3 Integer maxCount = drugTemplateRecommends.stream().map(DrugTemplateRecommend::getDrugTemplateCount).collect(Collectors.maxBy(Integer::compare)).get();
4 //根据drugTemplateCount字段,取出集合中的最小值
5 Integer minCount = drugTemplateRecommends.stream().map(DrugTemplateRecommend::getDrugTemplateCount).collect(Collectors.minBy(Integer::compare)).get();

五.求和

1 List<DrugTemplateRecommend> drugTemplateRecommends = new ArrayList<>();
2 //获取集合对象中所有的drugTemplateCount并求和
3 Integer sumCount = drugTemplateRecommends.stream().collect(Collectors.summingInt(DrugTemplateRecommend::getDrugTemplateCount));

六,取平均值

1 List<DrugTemplateRecommend> drugTemplateRecommends = new ArrayList<>();
2 //获取集合对象中所有的drugTemplateCount并取平均值
3 Double averageCount = drugTemplateRecommends.stream().collect(Collectors.averagingDouble(DrugTemplateRecommend::getDrugTemplateCount));

七,分组

1 List<DrugTemplateRecommend> drugTemplateRecommends = new ArrayList<>();
2 //将集合对象按照drugTemplateCount字段分组
3 Map<Integer, List<DrugTemplateRecommend>> countMap = drugTemplateRecommends.stream().collect(Collectors.groupingBy(DrugTemplateRecommend::getDrugTemplateCount));

八.嵌套多重分组

1 List<DrugTemplateRecommend> drugTemplateRecommends = new ArrayList<>();
2 //将集合对象按照drugTemplateCount字段分组后,在进行对deptId进行分组
3 Map<Integer, Map<Integer, List<DrugTemplateRecommend>>>  countDeptMap = drugTemplateRecommends.stream().collect(Collectors.groupingBy(DrugTemplateRecommend::getDrugTemplateCount,Collectors.groupingBy(DrugTemplateRecommend::getDeptId)));

九.分区(高级筛选)

1 List<DrugTemplateRecommend> drugTemplateRecommends = new ArrayList<>();
2 //根据drugTemplateCount字段,将集合中分为两部分,一部分根据drugTemplateCount大于100,一部分小于等于100
3 Map<Boolean, List<DrugTemplateRecommend>> partMap = drugTemplateRecommends.stream().collect(Collectors.partitioningBy(v -> v.getDrugTemplateCount() > 100));

 

posted @ 2021-08-26 16:40  青春的西瓜  阅读(473)  评论(0编辑  收藏  举报