我有一张地图Map<MetricResult, Long> metricResultToComputationTime
。
MetricResult
有一个方法MetricResult::getEndTime
。
我想要一个每个人都有独特的结束时间的List<MetricResult>
地方。MetricResult
如果结束时间匹配,我想使用地图中计算时间较长的那个。我该如何巧妙地做到这一点?
我知道有一些简单而冗长的方法可以做到这一点,但我正在寻找一些优雅的方法。
我尝试了一些这样的东西:
List<MetricResult> metricResults =
metricResultToComputationTime.entrySet().stream()
.collect(
groupingBy(
MetricResult::getEndTime,
collectingAndThen(maxBy(Map.Entry.comparingByValue()), Optional::get)))
.values();
但它不能编译
错误:
没有找到适合的方法collect(java.util.stream.Collector<MetricResult&java.util.Map.Entry<java.lang.Object,V>,capture#1 of ?,java.util.Map<Timestamp,java.lang. Object>>) 方法 java.util.stream.Stream.collect(java.util.function.Supplier,java.util.function.BiConsumer<R,? super java.util.Map.Entry<MetricResult,Timestamp>>,java .util.function.BiConsumer<R,R>) 不适用(推理变量 T 具有不兼容的边界上限:MetricResult,java.util.Map.Entry<K,V>,T,T 下限:MetricResult,Timestamp> )
小修改:
MetricResult::getEndTime
获取endTimeent -> ent.getKey().getEndTime()
: 。values().stream().map(Map.Entry::getKey).toList()
。