2017-08-03 6 views
2

アカウントのリストを繰り返し、Java 8ラムダ機能を使用してダブルクレジット額を合計します。何か案は?JavaのLambdaを使用したList内のdouble値の合計8

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; 
    } 
} 

私は、アカウントのリストを持って、私の代わりに私が以下に示されている伝統的なアプローチで、私はそれについて行かないか、ラムダの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; 
} 
+4

のリストにマップ何が自分を試してみたのですか?提案:ストリームをリストから外し、二重値のリストにマップし、ストリームの内容を合計します。 – Jesper

答えて

2

リストからストリームを作成し、double型の値

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

次のコードは、それをしない:

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

stream()Streamを作成します。
filter何のNPEは
mapToDouble(Account::getAmount)を投げないことを確認してくださいAccount#amountStreamAccountを置き換えます。
sum()は値を合計します。

関連する問題