私はいっぱいしたいというFeeAccountリストを持っています。私はそれを成し遂げるために)(.stream.map使用します。私は何を管理していることは私のリストをマッピングし、それを返すメソッドを作ることです。私は私がオンライン発見した他のいくつかの例を使用してこのコードを書いています。私の問題は何とかそれが一覧と互換性のないリストを返すということです。
私はエラーを取得しています:互換性のないタイプを。必要な一覧が、「地図」がストリームに推論されなかった:型変数のインスタンス(複数可)を(S)Rはリストにその結果ストリーム準拠存在します
私が理解したような問題は、私が使用して一部である(Collectors.toList())を収集。しかし、私はわかりません。私も明確にどのようなエラーメッセージの意味を理解していません。
たぶん誰かが私が間違ってやっているかを説明できますか?それは.stream.mapですか()?私は前にそれを使ったことがないので。それとも、問題がどこかにあります。
Method(List<contract> contractList){
List<FeeAccount> feeAccounts = new ArrayList<>();
feeAccounts = contractList
.stream()
.map(contract -> {
List<Fee> monthlyFees=...;
return monthlyFees.stream()
.map(monthlyFee -> {
FeeAccount account = new FeeAccount();
account.setFeeCode(monthlyFee.getFeeCode());
account.setDebtorAccount(contract.getDebtorAccount());
return account;
}).collect(Collectors.toList());
});}
あなたは、ネストされた2つの持っているmap
動作を制御します。外側の変換contract
にList<FeeAccount>
、および内側変換Fee
しますFeeAccount
。
したがって、あなたのパイプラインは、その結果Stream<List<FeeAccount>>
、端末操作なし。
あなたが追加した場合.collect(Collectors.toList())
、最後に、あなたが得られますList<List<FeeAccount>>
。
あなたは単一の出力リストにすべてのそれらの内側のリストをマージしたい場合は、使用する必要がありますflatMap
。
フラットを取得するにはList
:
List<FeeAccount> feeAccounts =
contractList.stream()
.flatMap(contract -> {
List<Fee> monthlyFees=...;
return monthlyFees.stream()
.map(monthlyFee -> {
FeeAccount account = new FeeAccount();
account.setFeeCode(monthlyFee.getFeeCode());
account.setDebtorAccount(contract.getDebtorAccount());
return account;
});
})
.collect(Collectors.toList();