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