我上课
public class SomeClass {
private String date;
private int players;
private int currency;
// getters setters omitted for brevity
}
我收集了这些对象。现在,我想按日期对这个对象进行分组,对玩家总数进行计数,并将currencyId设置为0。我通过这种方式做到这一点:
list = list.stream()
.collect(
groupingBy(SomeClass::getDate,
collectingAndThen(reducing((a, b) -> {
a.setDate(a.getDate());
a.setPlayers(a.getPlayers() + b.getPlayers());
a.setCurrency(0);
return a;
}), Optional::get)))
.values();
一切都很好,除非我只有一个特定日期的对象。该对象不会将货币设置为0(因为如果对象只有一个,则减少不起作用。)所以这是我的问题。
如果我有:
Object1 ("11.09", 12, 12)
Object2 ("11.09", 8, 13)
Object3 ("12.09", 1, 2)
Object4 ("12.09", 0, 1)
Object5 ("13.09", 12, 12)
输出必须为:
Object6 ("11.09", 20, 0)
Object7 ("12.09", 1, 0)
Object8 ("13.09", 12, **0**)
但相反:
Object6 ("11.09", 20, 0)
Object7 ("12.09", 1, 0)
Object8 ("13.09", 12, **12**)
帮助请
答案 0 :(得分:3)
币种未设置为0,因为pip install pandas
不会被评估为单次接收结果。如果要将所有货币设置为0,则将其映射为0,如下所示,
reducing
@Holger正确指出,您可能要使用list.stream().map(ele->{ele.setCurrency(0);return ele;}).collect(
groupingBy(SomeClass::getDate,
collectingAndThen(reducing((a, b) -> {
a.setPlayers(a.getPlayers() + b.getPlayers());
return a;
}), Optional::get)))
.values();
,
toMap
希望有帮助。