gpt4 book ai didi

java - 从 Java Stream of Map 中按键将它们分组并找到最大值不按预期工作

转载 作者:行者123 更新时间:2023-12-04 23:35:07 25 4
gpt4 key购买 nike

来自输入 Stream<Map<String,Float>我正在尝试找到具有最大值的独特分析物。我尝试了以下但没有得到预期的结果。我在收集值(value)时犯了一些错误。

示例输入数据:List<Map<String,Float>

{HNO3=2.005}
{HNO3=2.009}
{HCl=10.2}
{F-=0.0, HNO3=50.0}

Actual result : {HCl=Optional[HCl=10.2], F-=Optional[F-=0.0], HNO3=Optional[HNO3=50.0]}
Expected result : {HCl=10.2, F-=0.0, HNO3=50.0}

我试过的 Java 代码:-

finalResponse.getChosenStartingMaterials()
.stream()
.map(Analyte::getMatrixUtilisationMap) // Stream<Map<String,Float>>
.flatMap(it -> it.entrySet().stream())
.collect(Collectors.groupingBy(Map.Entry::getKey, Collectors.maxBy((m1, m2) -> m1.getValue().compareTo(m2.getValue()))))

最佳答案

Collectors.maxBy() 产生一个 Optional,因为如果 maxBy 应用于空的 Stream,它必须返回一个空的可选

您可以使用 Collectors.toMap 代替 Collectors.groupingBy 来避免 Optionals:

finalResponse.getChosenStartingMaterials()
.stream()
.map(Analyte::getMatrixUtilisationMap) // Stream<Map<String,Float>>
.flatMap(it -> it.entrySet().stream())
.collect(Collectors.toMap(Map.Entry::getKey,
Map.Entry::getValue,
(v1, v2) -> v1.compareTo(v2) >= 0 ? v1 : v2));

finalResponse.getChosenStartingMaterials()
.stream()
.map(Analyte::getMatrixUtilisationMap) // Stream<Map<String,Float>>
.flatMap(it -> it.entrySet().stream())
.collect(Collectors.toMap(Map.Entry::getKey,
Map.Entry::getValue,
Float::max));

关于java - 从 Java Stream of Map 中按键将它们分组并找到最大值不按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60279971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com