[使用Java 8中的流进行映射重复键错误修复

问题描述 投票:0回答:1

我在这个地方收到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等。

java mapping
1个回答
0
投票

您需要将合并功能传递给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;})
            );
© www.soinside.com 2019 - 2024. All rights reserved.