这是一个示例方案:
想象一下,我们有如下员工记录:
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}
问题内容: 问题答案: Mysql作为关键字的分隔符使用反引号“`”,而不是方括号(例如sql server)
问题内容: 假设有一个与此问题类似的情况。我想得到以下结果: 我可以使用选定的答案作为解决方案: 我如何确保即使在该范围内没有任何结果,也将显示30-39的分数范围? 问题答案: 尝试以下查询(也在SQL Fiddle上): 编辑: 您可以通过将参数更改为轻松调整范围。可以使用以下构造来确保始终覆盖您的分数: 对于CTE。
问题内容: 我设法绘制了数据,并想为其添加背景图像(地图)。数据是按长/纬度值绘制的,我也具有图像三个角(左上角,右上角和左下角)的长/纬度值。 我试图弄清楚如何在imshow中使用’extent’选项。但是,我发现的示例并未说明如何为每个角指定x和y(在我的情况下,我具有三个角的信息)。 将图像添加到绘图中时,如何为图像指定三个角的位置? 谢谢 问题答案: 在当前轴的坐标中指定要粘贴图像的矩形的
我想用“IntStream”来执行后范围。 所以,普通看起来像: 但是我需要,像这样: 如何实现?
问题内容: 我正在尝试对此表进行查询: 我想获得输出: 我想得到那个结果,所以我会知道什么时候开始赚钱,什么时候停止钱。我还对开始花钱之前的月份数(这解释了第一行)以及停止钱的月份数(这解释了为什么我也对2013年7月至2013年8月的第三行感兴趣)感兴趣。 )。 我知道我可以在日期上使用min和max,在金额上使用sum,但是我不知道如何以这种方式划分记录。 谢谢! 问题答案: 这是一个主意(和
感谢所有人!