如何使用流在Java 8中按值范围分组
这是一个示例方案:
想象一下,我们有如下员工记录:
name, age, salary (in 1000 dollars) a, 20, 50
b, 22, 53
c, 34, 79
等等。目的是计算不同年龄组的平均工资(例如21至30岁之间以及31至40岁之间,依此类推)。
我想使用它来做,stream
而我只是无法理解如何使用它groupingBy
来完成这项工作。我在想也许我需要定义某种元组的年龄范围。有任何想法吗?
回答:
以下代码将为您提供所需的内容。关键是“ Collectors”类,它支持分组。
Map<Double,Integer> ageGroup= employees.stream().collect(Collectors.groupingBy(e->Math.ceil(e.age/10.0),Collectors.summingInt(e->e.salary)));
假设工资为整数但易于转换为两倍的插图
完整的程序看起来像
public static void main(String[] args) { // TODO Auto-generated method stub
List<Employee> employees = new ArrayList<>();
employees.add(new Employee("a",20,100));
employees.add(new Employee("a",21,100));
employees.add(new Employee("a",35,100));
employees.add(new Employee("a",32,100));
Map<Double,Integer> ageGroup= employees.stream().collect(Collectors.groupingBy(e->Math.ceil(e.age/10.0),Collectors.summingInt(e->e.salary)));
System.out.println(ageGroup);
}
public static class Employee {
public Employee(String name, int age, int salary) {
super();
this.name = name;
this.age = age;
this.salary = salary;
}
public String name;
public int age;
public int salary;
}
输出是
{4.0=200, 2.0=100, 3.0=100}
以上是 如何使用流在Java 8中按值范围分组 的全部内容, 来源链接: utcz.com/qa/400348.html