我知道如何从HashMap<T, Double>
获取最小键和元素:
public static<T> Map.Entry<T, Double> getEntryOfMinimumVal(Map<T, Double> map) {
return map.entrySet().stream()
.min(Map.Entry.comparingByValue(Double::compareTo)).get();
}
但是,对于包含最小值的Set
,我无法获得HashMap<T1, Set<T2>>
中的密钥和Set
:
/**
* return minimum value of {getValue(elem)}_{elem is T2 values in all values of mapOfSet}
* and key of type T1 whose value (Set<T2) contains the minimum value
*/
public static<T1, T2> Map.Entry<T1, T2> getMinimumKeyAndElement(HashMap<T1, Set<T2>> mapOfSet){
???
}
答案 0 :(得分:3)
为什么不分2步执行:
因为可能没有这样的值,所以应该使用Optional作为返回类型。 您应该在参数类型中使用通配符,以提供更灵活的API:
public static<T1, T2> Optional<Map.Entry<T1, Set<T2>>> getMinimumKeyAndElement(Map<? extends T1,? extends Set<? extends T2>> mapOfSet){
T2 minValue = mapOfSet.values().stream().flatMap(Set::stream).min(comparator_for T2);
return mapOfSet.entrySet().stream().filter(s->s.getValue().contains(minValue)).findFirst();
}