mar*_*kin 6 java collections java-8 java-stream
我有一个对象:
public class CurrencyItem {
private CurrencyName name;
private BigDecimal buy;
private BigDecimal sale;
private Date date;
//...
}
Run Code Online (Sandbox Code Playgroud)
其中CurrencyName
一个是:EUR,USD,RUR等.
还有两个清单
List<CurrencyItem> currenciesByCommercialBank = ...
List<CurrencyItem> currenciesByCentralBank = ...
Run Code Online (Sandbox Code Playgroud)
如何将此列表合并到Map<CurrencyItem, CurrencyItem>
键所在的位置,currenciesByCommercialBank
并将值currenciesByCentralBank
与条件合并为
currenciesByCommercialBank.CurrencyName == currenciesByCentralBank.CurrencyName
Run Code Online (Sandbox Code Playgroud)
这应该是最佳的.您首先要建立一个从货币到商业银行的地图.然后你穿过你的中心建立一个从商业到中心的地图(在第一张地图中查找).
List<CurrencyItem> currenciesByCommercialBank = new ArrayList<>();
List<CurrencyItem> currenciesByCentralBank = new ArrayList<>();
// Build my lookup from CurrencyName to CommercialBank.
Map<CurrencyName, CurrencyItem> commercials = currenciesByCommercialBank
.stream()
.collect(
Collectors.toMap(
// Map from currency name.
ci -> ci.getName(),
// To the commercial bank itself.
ci -> ci));
Map<CurrencyItem, CurrencyItem> commercialToCentral = currenciesByCentralBank
.stream()
.collect(
Collectors.toMap(
// Map from the equivalent commercial
ci -> commercials.get(ci.getName()),
// To this central.
ci -> ci
));
Run Code Online (Sandbox Code Playgroud)