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