Atitit 集合分组聚合操作sum count avg java版本groovy版本 目录 1. //按性别统计用户数 1 7. //按性别获取用户名称 1 16. //按性别求年龄的总和 1 2

Atitit 集合分组聚合操作sum count avg java版本groovy版本

 

目录

1. //按性别统计用户数 1

7. //按性别获取用户名称 1

16. //按性别求年龄的总和 1

23. //按性别求年龄的平均值 2

3. //获取所有用户的平均年龄 2

12. //获取所有用户的年龄总和 2

1. Groovy  sum 3

2. Groupby 原理。。 4

2.1. Step1 groupby  returns Map<grpbyKey, List> 4

2.2. Step2    transform List into Map,key is grpbyKey,value is sumAvgListMapProp 4

2.3. collect 4

3. ref 4

 

  1. //按性别统计用户数
  2. Map<User.Sex, Integer> map = users.parallelStream().collect(
  3. Collectors.groupingBy(User::getGender,
  4. Collectors.summingInt(p -> 1)));
  5. System.out.println(map); 
  6.  
  7. //按性别获取用户名称
  8. Map<User.Sex, List<String>> map2 = users.stream()
  9. .collect(
  10. Collectors.groupingBy(
  11. User::getGender,
  12. Collectors.mapping(User::getName,
  13. Collectors.toList())));
  14. System.out.println(map2); 
  15.  
  16. //按性别求年龄的总和
  17. Map<User.Sex, Integer> map3 = users.stream().collect(
  18. Collectors.groupingBy(User::getGender,
  19. Collectors.reducing(0, User::getAge, Integer::sum)));
  20.  
  21. System.out.println(map3);
  22.  
  23. //按性别求年龄的平均值
  24. Map<User.Sex, Double> map4 = users.stream().collect(
  25. Collectors.groupingBy(User::getGender,
  26. Collectors.averagingInt(User::getAge)));
  27. System.out.println(map4); 

 

 

 

  1. // 注意,reduce操作每处理一个元素总是创建一个新值,
  2. // Stream.reduce适用于返回单个结果值的情况
  3. //获取所有用户的平均年龄
  4. private static void reduceAvg() {
  5. // mapToInt的pipeline后面可以是average,max,min,count,sum
  6. double avg = users.parallelStream().mapToInt(User::getAge)
  7. .average().getAsDouble(); 
  8.  
  9. System.out.println("reduceAvg User Age: " + avg);
  10. } 
  11.  
  12. //获取所有用户的年龄总和
  13. private static void reduceSum() {
  14. double sum = users.parallelStream().mapToInt(User::getAge)
  15. .reduce(0, (x, y) -> x + y); // 可以简写为.sum()
  16.  
  17. System.out.println("reduceSum User Age: " + sum);
  18. }

 

  1. Groovy  sum

 

 

 

def errorCodeList = [

[code: "code1", language: 2, content: "aaa"],

[code: "code1", language: 4, content: "bbbb"],

 

[code: "code2", language: 3, content: "ccc"],

 

]

 

//  first groupBy, which returns Map<grpbyKey, List>

def b =  errorCodeList.groupBy {

it.code

}.collect  {

 

//Entries

// ...and transform List into Map

  code, List value ->

    def line=[(code): value.sum { e->e.language }]

        return  line

//return a map

 

}

 

//[code1:6, code2:3]

println b

 

  1. Groupby 原理。。
    1. Step1 groupby  returns Map<grpbyKey, List>
    2. Step2    transform List into Map,key is grpbyKey,value is sumAvgListMapProp
    3. collect  
  2. ref

 

 

JDK1.8聚合操作.mhtml

原文地址:https://www.cnblogs.com/attilax/p/15197349.html