我需要一些帮助来将Map<String, List<Fee>>
与List<FeeRequest>
映射。
Fee
对象如下:
private String feeCode;
FeeRequest
对象看起来像这样:
private String feeCode;
private String debtorAccount;
所以我需要映射:
字符串债务人帐户(来自地图) -> debtorAccount(来自列表)
feeCode(来自地图列表) -> feeCode(来自列表列表)
我想尝试不使用foreach
,而是学会正确使用.stream().map()
功能。
我设法做到的事情:
Map<String, List<Fee>> feeAccounts
是从另一种方法解析的。
List<FeeRequest> feeRequests = feeAccounts.entrySet().stream().map(feeAcc -> {
FeeRequest request = new FeeRequest();
request.setDebtorAccount(feeAcc.getKey());
request.setFeeCode(...);
return request;
}).collect(Collectors.toList());
我认为我的方法不好,但是我不知道如何使它起作用。我试着看一些例子,但是它们太基础了。因此,我很乐意得到任何帮助。谢谢!
答案 0 :(得分:1)
如果每个Fee
实例都应生成一个FeeRequest
实例,则需要flatMap
:
List<FeeRequest> feeRequests =
feeAccounts.entrySet()
.stream()
.flatMap(feeAcc -> feeAcc.getValue()
.stream()
.map(f -> {
FeeRequest request = new FeeRequest();
request.setDebtorAccount(feeAcc.getKey());
request.setFeeCode(f.getCode());
return request;
}))
.collect(Collectors.toList());
答案 1 :(得分:0)
如果FeeRequest
的构造函数带有两个参数,则可以使用类似以下的内容:
feeAccounts.entrySet().stream()
.flatMap(
accountEntry -> accountEntry.getValue().stream().map(
fee -> new FeeRequest(
accountEntry.getKey(),
fee.getFeeCode()
)
)
).collect(toList());