我在这个地方收到PublicException: Duplicate Keys
错误。
Map<BgwContract, List<Fee>> bgwContractFeeMap = bgwContractList
.stream()
.filter(bgwContract -> !bgwContract.getStatus().equals(BgwContractStatus.CLOSED))
.filter(bgwContract -> availableIbans.contains(bgwContract.getFeeAccount()))
.collect(
Collectors.toMap(bgwContract -> bgwContract,
bgwContractFeeService::getContractMonthlyFees)
);
我了解问题是存在一些重复项并立即崩溃。我知道.distinct()
可以解决此错误,但是我不想丢失任何数据。有没有一种方法可以增强此映射来解决此错误而又不丢失任何值,例如某种过滤器或任何其他种类的Java 8方法?我不是在谈论MultiMaps等。
您需要将合并功能传递给Collectors.toMap()
:
Map<BgwContract, List<Fee>> bgwContractFeeMap = bgwContractList
.stream()
.filter(bgwContract -> !bgwContract.getStatus().equals(BgwContractStatus.CLOSED))
.filter(bgwContract -> availableIbans.contains(bgwContract.getFeeAccount()))
.collect(
Collectors.toMap(bgwContract -> bgwContract,
bgwContractFeeService::getContractMonthlyFees,
(l1,l2)->{l1.addAll(l2); return l1;})
);