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

  • 相关阅读:
    FCKeditor 2.6.4在ASP.NET中的安装、配置方法【转】 Fred
    框架页中针对IE6自适应宽度,不出现横向滚动条 Fred
    安装中文VS2008 SP1 和.NETFRAMEWORK 3.5SP1后智能提示是英文的解决办法 Fred
    .Net转义字符[转] Fred
    ReportViewer无法直接打印 Fred
    ASP.NET MVC 官方教程 Fred
    修改SQL Server 2005 sa用户密码的方法 Fred
    数据类型/对象类型介绍(1)NSString
    关于Chrome沙箱技术(沙盒技术)
    UITableView cell自定义视图中插入Table实现复杂界面
  • 原文地址:https://www.cnblogs.com/liangblog/p/14478667.html
Copyright © 2011-2022 走看看