Lambda表达式排序、过滤、转Map

一、 单列排序

modelList.sort(Comparator.comparing(TypeModel::getInnerType));

modelList.sort(new Comparator<TypeModel>() {
                @Override
                public int compare(TypeModel o1, TypeModel o2) {
                    return o1.getInnerType().compareTo(o2.getInnerType());
                }
            });   

flowVos.sort(new Comparator<FlowVo>() {
                @Override
                public int compare(FlowVo o1, FlowVo o2) {
                    return o1.getNumber() - o2.getNumber();
                }
            });

Collections.sort(modelList, (TypeModel o1, TypeModel o2) -> {
            String t1 = o1.getProposeTime();
            String t2 = o2.getProposeTime();
            return t1.compareTo(t2);
        });

二、多列排序

List<Student> collect2 = list.stream()
    .sorted(Comparator.comparing(Student::getAge).reversed().thenComparing(Student::getScore))
    .collect(Collectors.toList());

List<PNumModel> newTrimList = toTrimList.stream()
                .sorted(Comparator.comparing(PNumModel::getErrNum)
                        .thenComparing(PNumModel::getCode).reversed())
                .collect(Collectors.toList()); //注意,最后reversed,如果两个就恢复没有的了

org.apache.commons.collections.comparators

public static ComparatorChain getComparatorChain() {
        final Comparator myCmp1 = ComparatorUtils.reversedComparator(ComparableComparator.INSTANCE); //倒序
        final Comparator myCmp2 = ComparatorUtils.nullHighComparator(ComparableComparator.INSTANCE); //允许null,正序递增排列
        // 声明要排序的对象的属性,并指明所使用的排序规则,如果不指明,则用默认排序
        ArrayList<Object> sortFields = new ArrayList<Object>();
        sortFields.add(new BeanComparator("code", myCmp1)); //主排序(第一排序)
        sortFields.add(new BeanComparator("createTime", myCmp2)); //次排序(第二排序)
        // 创建一个排序链
        return new ComparatorChain(sortFields);
    }
final ComparatorChain multiSort = getComparatorChain();
Collections.sort(ModelList, multiSort);

三、List转换与过滤

List<PNumModel> top5List = trimList.stream()
                .filter(PNumModel -> (PNumModel.getErrNum() != 0))
                .collect(Collectors.toList());

List<Po> plazas  = trimList.stream().filter(p -> Util.checkR(p.getCode()) && Util.checkP(p.getCode())).collect(Collectors.toList());


抽取字段转换为新List
List<String> nameList = studentList.stream().map(StudentInfo::getName).collect(Collectors.toList());

抽取字段并求和

int total = List.stream().mapToInt(entity::getDistance).sum();

四、List 转Map

Map<String, TbSeller> tbSellerMap = tbSellers.stream().collect(Collectors.toMap(TbSeller::getSellerId, Function.identity(), (k1, k2) -> k1)); //合并按初始值

Map<String,Long> yMap = trendHourPos.stream()
                    .filter(p->p.getDt().equals(yesterday)).collect(Collectors.toMap(p->p.getHour(), v->v.getCv(), (oldVal, currVal) -> currVal));    //合并按最新值

Map<String,Long> yestdayTrendHourMap = trendHourPos.stream()
                    .filter(p->p.getDt().equals(yesterday)).collect(Collectors.toMap(p->p.getHour(), v->v.getCv(), (oldVal, currVal) -> (currVal+oldVal)));

Map<String, List<String>> map = list.stream().collect(Collectors.toMap(Person::getId,
                p ->  {
                     List<String> getNameList = new ArrayList<>();
                         getNameList.add(p.getName());
                         return getNameList;
                     },
                     (List<String> value1, List<String> value2) -> {
                         value1.addAll(value2);
                         return value1;
                     }
                 ));  //合并为List
       
Map<String, List<TaskPo>> ppMap = plazs.stream()
                .collect(Collectors.toMap(TaskPo::getCenterCode, p -> {
                    List<TaskPo> ppList = new ArrayList<>();
                    ppList.add(p);
                    return ppList;
                }, (List<TaskPo> value1, List<TaskPo> value2) -> {
                    value1.addAll(value2);
                    return value1;
                })); //合并为List
 Map<String, HourTodayPo> dtCvMap = timeList.stream()
                    .collect(Collectors.groupingBy(HourTodayPo::getHour,
                            Collectors.collectingAndThen(Collectors.toList(), value -> value.get(value.size()-1)))); //按字段分组成map并取最后一个

 Map<String, Long> dtCvMap = timeList.stream()
                    .collect(Collectors.groupingBy(HourTodayPo::getHour,
                            Collectors.collectingAndThen(Collectors.toList(), value -> {                                
                                 long total = value.stream().mapToLong(HourTodayPo::getCv).sum();    
                                 return total;
                                })));//按字段分组成map,然后按自定义逻辑取值


 

猜你喜欢

转载自blog.csdn.net/yunxing323/article/details/113095619
今日推荐