获取 HashMap<T1, Set<T2>> 的最小键和整数 java 8 种方式

Get minimum key and Integer of HashMap<T1, Set<T2>> with java 8 way

我知道如何从 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){
    ???
}

为什么不分两步完成:

  1. 在所有集合中找到最小值
  2. 查找包含具有此值的集合的任何地图条目

因为可能没有这样的值,所以您应该使用 Optional 作为 return 类型。 并且您应该在参数类型中使用通配符,以提供更灵活的 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();
}