微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用流在Java 8中按值范围分组

如何解决如何使用流在Java 8中按值范围分组

以下代码将为您提供所需的内容。关键是“ 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}

解决方法

这是一个示例方案:

想象一下,我们有如下员工记录:

name,age,salary (in 1000 dollars)
   a,20,50
   b,22,53
   c,34,79

等等。目的是计算不同年龄组的平均工资(例如21至30岁之间以及31至40岁之间,依此类推)。

我想使用它来做,stream而我只是无法理解如何使用它groupingBy来完成这项工作。我在想也许我需要定义某种元组的年龄范围。有任何想法吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。