gpt4 book ai didi

java - 使用java转换为Lambda表达式?

转载 作者:行者123 更新时间:2023-12-01 12:38:50 24 4
gpt4 key购买 nike

我正在学习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
}

我们如何使用 Streams 和 map 来实现?

最佳答案

在一种方式中,您可以对列表进行分区,然后求和适当的属性为 -

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();

或者正如 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())));

关于java - 使用java转换为Lambda表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62343857/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com