使用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));