Set<String> s;
HashMap<String, Double> hm;
而且,我想找到hm
密鑰,其所有可能的密鑰(候選人)S IN中涉及到的最大值集合s。
下面的方法是我已經有,這有助於我找到關於一個值的多個鍵。我可能會使用Collections.Max(hm.values())
得到最大的價值
public static <T, E> Set<T> getKeysByValue(Map<T, E> map, E value) {
Set<T> keys = new HashSet<T>();
for (Entry<T, E> entry : map.entrySet()) {
if (Objects.equals(value, entry.getValue())) {
keys.add(entry.getKey());
}
}
return keys;
}
會是什麼「整潔」的解決方案,你可以建議?
過去幾個月我一直在使用Python,現在處理所有類型的地圖而不是Java的字典是非常不方便的。
我想談談對這個問題是什麼,在Java中有些「聰明」的方式簡化了下面的代碼。
import com.google.common.collect.Sets;
double maxVal = 0.0;
for(String candidate : s){
if(hm.get(candidate) >= maxVal){
maxVal = hm.get(candidate);
}
}
Set<String> subset = Sets.intersection(set, getKeysByValue(hm, maxVal));
可能的類Python實現(名單理解)是
subset = set.intersection(s, getKeysByValue(hm, Collections.max([hm.get(item) for item in s]))
檢查[在Java映射中與最大值關聯的查找鍵](http://stackoverflow.com/questions/5911174/finding-key-associated-with-max-value-in-a-java-map ),並閱讀關於多個最大值接受的答案的評論 – sam
@sam它有點不同,只有選項是set's'中的元素,我願意看到詳細的實現技巧。 如果我用pythonic風格編寫它,答案會是類似於 'Answer set = getKeysByValue(hm,Collections.max([hm。得到(項目)在s]))' – SUNDONG
'一個可能的解決方案是隻找到最大值設置,然後使用該值與地圖中的值比較 – sam