从Map的Java流中,通过键对它们进行分组,并找到最大值无法正常工作
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从Map的Java流中,通过键对它们进行分组,并找到最大值无法正常工作相关的知识,希望对你有一定的参考价值。
从输入Stream<Map<String,Float>
中,我试图找到唯一的分析物,并且该分析物具有最大值。我尝试了以下方法,但未获得预期的结果。我在收集价值时犯了一些错误。
样本输入数据: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
,则它必须返回空的Optional
。您可以使用Collectors.toMap
代替Collectors.groupingBy
来避免Optional
:
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));
以上是关于从Map的Java流中,通过键对它们进行分组,并找到最大值无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章