我正在学习 lambda 表达式。我正在尝试计算值。
这是示例:
double sendersCount = 0.0;
double reciversCount = 0.0;
for(RecordDTO record : records){
if("1".equals(record.getSendersId())) {
sendersCount += record.getCount().doubleValue();
} else {
reciversCount += record.getCount().doubleValue();
}
}
class Record{
private String id;
private BigDecimal count;
private String senderId;
//setters
//getters
}
Run Code Online (Sandbox Code Playgroud)
我们如何使用Streams和maps来实现?
以一种方式,您可以将列表分区,然后sum
将适当的属性分区为 -
Map<Boolean, List<Record>> partitioned = records.stream()
.collect(Collectors.partitioningBy(rec -> rec.getSendersId().equals("1")));
double sendersCount = partitioned.get(Boolean.TRUE).stream()
.mapToDouble(Record::getSendersCount).sum();
double receiversCount = partitioned.get(Boolean.FALSE).stream()
.mapToDouble(Record::getReceiversCount).sum();
Run Code Online (Sandbox Code Playgroud)
或者正如 Ousmane 指出的那样,您可以使用summingDouble
带有条件的下游进行映射,例如:
Map<Boolean, Double> summingValue = records.stream()
.collect(Collectors.partitioningBy(r -> "1".equals(r.getSendersId()),
Collectors.summingDouble(r -> "1".equals(r.getSendersId()) ?
r.getSendersCount() : r.getReceiversCount())));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
125 次 |
最近记录: |