【发布时间】:2017-06-30 06:39:06
【问题描述】:
我有一个Settlement 类的列表,它具有以下属性:
public class Settlement {
private String contractNo;
private String smartNo;
private String dealTrackNo;
private String buySellFlag;
private String cashFlowType;
private String location;
private String leaseNo;
private String leaseName;
private double volume;
private double price;
private double settleAmount;
// getters and setters
}
现在我想将Settlement 的列表按SmartNo(字符串)分组,并得到settleAmount 的总和,这将成为每个SmartNo 的新settleAmount。
由于我使用的是 Java 8,stream 应该是要走的路。
Groupby 使用以下代码应该非常简单:
Map<String, List<Settlement>> map = list.stream()
.collect(Collectors.groupingBy(Settlement::getSmartNo));
System.out.println(map.getValues());
如果我想在按 SmartNo 分组并汇总结算金额后得到一个新列表怎么办?那里的大多数示例仅显示如何打印总和。我感兴趣的是如何获取聚合列表?
【问题讨论】:
-
streamentrySet 和map,将它发送到您的结果对象,并将collect它发送到List。 -
@teppic 你能说得更具体点吗?我对 Java 8 很陌生。不知道如何将
map它添加到我的结果对象中。 -
您的结果列表中需要什么类型的对象?
SmartNo和 sum 的简单元组是否足够? -
@teppic 这两个和另外两个:数量和价格
-
您想对每个 smartNo 的数量、价格和结算金额求和吗?
标签: java group-by aggregate java-stream collectors