【发布时间】:2018-09-23 10:03:34
【问题描述】:
假设我在下面有一个带有 getter 和 setter 的类,但只有默认构造函数。
注意:我不能改变这个类的结构。
class Target {
private String year;
private String month;
private String name;
private double target;
private double achieved;
public String getYear() {
return year;
}
public void setYear(String year) {
this.year = year;
}
public String getMonth() {
return month;
}
public void setMonth(String month) {
this.month = month;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getTarget() {
return target;
}
public void setTarget(double target) {
this.target = target;
}
public double getAchieved() {
return achieved;
}
public void setAchieved(double achieved) {
this.achieved = achieved;
}
}
我必须根据年份和名称添加目标和实现的列值。
Year Month Name Target Achieved
2018 8 Joey 50.00 10.00
2018 9 Joey 200.00 100.00
2018 9 Fred 200.00 150.00
2018 9 Fred 20.00 50.00
所以输出将是:
Year Month Name Target Achieved
2018 8 Joey 50.00 10.00
2018 9 Joey 200.00 100.00
2018 9 Fred 220.00 200.00
我看过一个例子,如果我有一个接受参数的构造函数,我如何实现这样的事情,但我对 Group by and sum objects like in SQL with Java lambdas? 的概念不太清楚:
如何仅使用默认构造函数来获得相同类型 List<Target> 但计算多列的值?
【问题讨论】:
-
hm...我已经提供了答案,但现在真正的问题是您想保留哪个个月?遇到顺序的第一个/最后一个?还是最大的?
-
@Eugene 我只想根据月份和名称计算总数。我已经更新了问题。谢谢
-
因此从您的示例看来,您需要根据此处的 3 件事进行分组:年、月和名称
-
@Eugene 在这个例子中是的。但我正在寻找的是一个灵活的解决方案,我可以根据分组(姓名)、(姓名+年)、(姓名+年+月)获得输出。
-
所以你想要一个动态分组?您不能简单地创建一个接受您的列表的方法和一个函数,该函数将充当
Collectors.toMap中键的映射函数吗?
标签: java lambda java-8 java-stream