dexBridgeStargateInfoHashMap = dexBridgeStargateInfos.stream().collect( Collectors.toMap(dexBridgeToken -> BuildKeyfromChainIdToChainIdPoolId(dexBridgeToken.getFromChainId(), dexBridgeToken.getToChainId()), DexBridgeStargateInfo::getEstimateFees,(key1, key2) -> key2)); 会有什么问题
时间: 2024-02-21 07:56:41 浏览: 38
这段代码中的 `toMap` 方法指定了一个合并函数 `(key1, key2) -> key2`,这个函数的作用是:当出现相同的 key 值时,选择 key2 将其覆盖 key1。这个函数的实现逻辑是有问题的,因为它会导致部分数据丢失。
举个例子,假设有两个不同的元素,它们的 key 值相同,分别为 K,其对应的 value 值分别为 V1 和 V2。当使用上述合并函数时,会选择 V2 覆盖 V1,这样就会导致 V1 的数据丢失。
如果希望保留所有的数据,可以考虑使用一个更加合理的合并函数。例如,可以将两个 value 值相加,或者将它们合并成一个 List。具体的合并函数实现需要根据业务需求来确定。
下面是使用合并函数实现保留所有数据的示例代码:
```
dexBridgeStargateInfoHashMap = dexBridgeStargateInfos.stream()
.collect(Collectors.toMap(
dexBridgeToken -> BuildKeyfromChainIdToChainIdPoolId(dexBridgeToken.getFromChainId(), dexBridgeToken.getToChainId()),
DexBridgeStargateInfo::getEstimateFees,
(val1, val2) -> val1 + val2));
```
这个合并函数将两个 value 值相加,保留所有数据。
阅读全文