使用Java 8中的Lambda的List中的double值的总和

时间:2017-08-03 13:56:20

标签: java lambda

我想遍历帐户列表,并使用 Java 8 lambda功能总结双倍信用额度。有什么想法吗?

import lombok.*;
import java.util.List;

@Data
public class Account {

private Double amount;
@Getter(AccessLevel.NONE)
private Boolean active;
private String companyCode;
private Long accountNumber;

    public Boolean isActiveAccount() {
        return active;
    }
}

我有一个帐户列表,我想使用Lambda Java 1.8功能总结信用额度,我该怎么做,而不是我在下面显示的传统方法?

//Lets pretend that the list has 3000 account-elements.
List<Account> accountsList = new ArrayList<>();

Double totalAmount = 0.0;

for (Account account : accountsList) {
    Double accAmountList = account.getAmount();
    if(null != accAmountList) totalAmount += accAmountList;
}

2 个答案:

答案 0 :(得分:5)

从列表中创建一个流,映射到双值列表

total=accountList.stream()
.filter(account ->account!=null&& 
account.getAmount()!=null).mapToDouble(Account::getAmount)
.sum()

答案 1 :(得分:2)

以下代码执行此操作:

accountsList.stream()
            .filter(a -> a != null && a.getAmount != null)
            .mapToDouble(Account::getAmount)
            .sum();

stream()创建Stream filter确保不会抛出任何NPE mapToDouble(Account::getAmount) 使用Account替换Stream中的每个Account#amount。< sum()对值进行求和。