我有一张 map Map<MetricResult, Long> metricResultToComputationTime
MetricResult
具有方法MetricResult::getEndTime
.
我想得到一个List<MetricResult>
,其中每个MetricResult
都有一个唯一的结束时间.如果结束时间匹配,我希望使用 map 中计算时间更长的那个.我该怎么做得干净利落?
我知道有一些简单而冗长的方法可以做到这一点,但我想找一种优雅的方式.
我试过这样的东西:
List<MetricResult> metricResults =
metricResultToComputationTime.entrySet().stream()
.collect(
groupingBy(
MetricResult::getEndTime,
collectingAndThen(maxBy(Map.Entry.comparingByValue()), Optional::get)))
.values();
但它不能编译
错误:
没有找到合适的方法, collect(java. util. stream. Collector MetricResults java. util. Map. Entry java. lang. Object,V,capture#1<&<> 的?,java.util.Map Timestamp,java.lang. Object)方法<>> java. util. stream. Stream. collect(java. util. function. Supplier,java. util. function. BiConsumer R,?< 超级 java.util.Map. Entry MetricResults,Timestamp,java.util.function. BiConsumer R,R)<>><> 不适用(推理变量T具有不相容的上限 bounds:MetricContact,java. util. Map. Entry K,V,T,T下界:<> MetricReport,时间戳)>