Rob*_*ain 2 java java-8 java-stream
给定一个List下面的Transaction类,使用Java 8个Lambda表达式,我想获得List的ResultantDTO,每一个帐户类型.
public class Transaction {
private final BigDecimal amount;
private final String accountType;
private final String accountNumber;
}
public class ResultantDTO {
private final List<Transaction> transactionsForAccount;
public ResultantDTO(List<Transaction> transactionsForAccount){
this.transactionsForAccount = transactionsForAccount;
}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我使用以下代码对List<Transaction>by 进行分组accountType.
Map<String, List<Transaction>> transactionsGroupedByAccountType = transactions
.stream()
.collect(groupingBy(Transaction::getAccountType));
Run Code Online (Sandbox Code Playgroud)
如何返回a List<ResultantDTO>,将List从每个map键传递到构造函数中,ResultantDTO每个包含一个accountType?
您可以在单流操作中执行此操作:
public List<ResultantDTO> convert(List<Transaction> transactions) {
return transactions.stream().collect(
collectingAndThen(
groupingBy(
Transaction::getAccountType,
collectingAndThen(toList(), ResultantDTO::new)),
map -> new ArrayList<>(map.values())));
}
Run Code Online (Sandbox Code Playgroud)
这里collectingAndThen使用了两次:一次用于下游Collector将列表转换为ResultantDTO对象,一次用于将生成的映射转换为其值列表.
| 归档时间: |
|
| 查看次数: |
559 次 |
| 最近记录: |