获取HashMap的最小键和整数<t1,设置<t2 =“”>&gt;用java 8方式</t1,>

时间:2015-02-02 07:53:51

标签: java java-8

我知道如何从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 个答案:

答案 0 :(得分:3)

为什么不分2步执行:

  1. 在所有集合中找到最小值
  2. 查找包含具有此值的集合的任何地图条目
  3. 因为可能没有这样的值,所以应该使用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();
    }