zoukankan      html  css  js  c++  java
  • java8 stream多字段排序

    List<类> list; 代表某集合

     
    //返回 对象集合以类属性一升序排序
     
    list.stream().sorted(Comparator.comparing(类::属性一));
     
    //返回 对象集合以类属性一降序排序 注意两种写法
     
    list.stream().sorted(Comparator.comparing(类::属性一).reversed());//先以属性一升序,结果进行属性一降序
     
    list.stream().sorted(Comparator.comparing(类::属性一,Comparator.reverseOrder()));//以属性一降序
     
    //返回 对象集合以类属性一升序 属性二升序
     
    list.stream().sorted(Comparator.comparing(类::属性一).thenComparing(类::属性二));
     
    //返回 对象集合以类属性一降序 属性二升序 注意两种写法
     
    list.stream().sorted(Comparator.comparing(类::属性一).reversed().thenComparing(类::属性二));//先以属性一升序,升序结果进行属性一降序,再进行属性二升序
     
    list.stream().sorted(Comparator.comparing(类::属性一,Comparator.reverseOrder()).thenComparing(类::属性二));//先以属性一降序,再进行属性二升序
     
    //返回 对象集合以类属性一降序 属性二降序 注意两种写法
     
    list.stream().sorted(Comparator.comparing(类::属性一).reversed().thenComparing(类::属性二,Comparator.reverseOrder()));//先以属性一升序,升序结果进行属性一降序,再进行属性二降序
     
    list.stream().sorted(Comparator.comparing(类::属性一,Comparator.reverseOrder()).thenComparing(类::属性二,Comparator.reverseOrder()));//先以属性一降序,再进行属性二降序
     
    //返回 对象集合以类属性一升序 属性二降序 注意两种写法
     
    list.stream().sorted(Comparator.comparing(类::属性一).reversed().thenComparing(类::属性二).reversed());//先以属性一升序,升序结果进行属性一降序,再进行属性二升序,结果进行属性一降序属性二降序
     
    list.stream().sorted(Comparator.comparing(类::属性一).thenComparing(类::属性二,Comparator.reverseOrder()));//先以属性一升序,再进行属性二降序
     
    生成结果

    List<Customer> list = Arrays.asList(c1,c2,c3);

    //转成list
    List<Integer> ageList = list.stream().map(Customer::getAge).collect(Collectors.toList());
    System.out.println("ageList:"+ageList);//ageList:[10, 20, 10]

    //转成set
    Set<Integer> ageSet = list.stream().map(Customer::getAge).collect(Collectors.toSet());
    System.out.println("ageSet:"+ageSet);//ageSet:[20, 10]

    //转成map,注:key不能相同,否则报错
    Map<String, Integer> CustomerMap = list.stream().collect(Collectors.toMap(Customer::getName, Customer::getAge));
    System.out.println("CustomerMap:"+CustomerMap);//CustomerMap:{李四=20, 张三=10, 王五=10}

    //字符串分隔符连接
    String joinName = list.stream().map(Customer::getName).collect(Collectors.joining(",", "(", ")"));
    System.out.println("joinName:"+joinName);//joinName:(张三,李四,王五)

    //聚合操作
    //1.学生总数
    Long count = list.stream().collect(Collectors.counting());
    System.out.println("count:"+count);//count:3
    //2.最大年龄 (最小的minBy同理)
    Integer maxAge = list.stream().map(Customer::getAge).collect(Collectors.maxBy(Integer::compare)).get();
    System.out.println("maxAge:"+maxAge);//maxAge:20

    //3.所有人的年龄
    Integer sumAge = list.stream().collect(Collectors.summingInt(Customer::getAge));
    System.out.println("sumAge:"+sumAge);//sumAge:40

    //4.平均年龄
    Double averageAge = list.stream().collect(Collectors.averagingDouble(Customer::getAge));
    System.out.println("averageAge:"+averageAge);//averageAge:13.333333333333334

    //分组
    Map<Integer, List<Customer>> ageMap = list.stream().collect(Collectors.groupingBy(Customer::getAge));
    System.out.println("ageMap:"+ageMap);//ageMap:{20=[com.mashibing.stream.Customer@20ad9418], 10=[com.mashibing.stream.Customer@31cefde0, com.mashibing.stream.Customer@439f5b3d]}


    //分区
    //分成两部分,一部分大于10岁,一部分小于等于10岁
    Map<Boolean, List<Customer>> partMap = list.stream().collect(Collectors.partitioningBy(v -> v.getAge() > 10));
    System.out.println("partMap:"+partMap);

    //规约
    Integer allAge = list.stream().map(Customer::getAge).collect(Collectors.reducing(Integer::sum)).get();
    System.out.println("allAge:"+allAge);//allAge:40

  • 相关阅读:
    what's the python之if判断、while循环以及for循环
    what's the python之基本运算符及字符串、列表、元祖、集合、字典的内置方法
    what's the python之变量、基本数据类型
    what's the python之python介绍
    计算机基础系列之网络基础——网络协议
    计算机基础系列之何为操作系统
    计算机基础系列之计算机硬件
    EXT3_DX_ADD_ENTRY: DIRECTORY INDEX FULL!
    无shell情况下的mysql远程mof提权利用方法详解
    /bin/rm: Argument list too long解決方法
  • 原文地址:https://www.cnblogs.com/liangblog/p/14478667.html
Copyright © 2011-2022 走看看