我有一个交易对象列表,如下所示:
现在,我需要根据每个组的交易类型找到平均值,并最终将该平均值倾入一个
在计算之前,对列表执行以下操作:
结果类:
List<Transaction> transactions = Arrays.asList(
new Transaction(brian, 2011, 300, "X", "M1"),
new Transaction(raoul, 2012, 1000, "T", "M1"),
new Transaction(raoul, 2011, 400, "S", "M2"),
new Transaction(mario, 2012, 710, "X", "M1"),
new Transaction(mario, 2012, 700, "X", "M2"),
new Transaction(alan, 2012, 950, "T", "M1")
);
交易类:
class Transaction {
private final Trader trader;
private final int year;
private final int value;
private String type;
private String method;
}
现在,我需要根据每个组的交易类型找到平均值,并最终将该平均值倾入一个
Result
对象中,其中包含有关正在计算平均值的组的一些其他数据等。在计算之前,对列表执行以下操作:
- 按年份分组交易
- 然后按方法进行分组
结果类:
class Result {
private Double avg;
private int year;
private String method;
}
代码:
Map<Integer, Map<String, Result>> res = transactions.stream().collect(
groupingBy(Transaction::getYear,
groupingBy(Transaction::getMethod),
collectingAndThen( averagingDouble( t -> "X".equals(t.getType()) ? 1: 0 ),
v -> new Result(v, GROUP_METHOD? , GROUP_YEAR?))
)
);
但是基于averagingDouble()
生成的double,这里无法访问 GROUP_METHOD 和 GROUP_YEAR 值,因为在此映射中会丢失所有其他信息。
有没有办法可以获取这些字段或正确地将结果映射到对象中?