Java 如何使用';最佳';LinkedHashMap中的值
我有一个问题: 我的HashMap看起来像:Java 如何使用';最佳';LinkedHashMap中的值,java,Java,我有一个问题: 我的HashMap看起来像: [1,2,3,4] , 5 [1,3,3,4] , 2 [1,2,5,4] , -1 [1,2,4,4] , -1 我想对这个hashmap进行排序,它成功了!我得到了一个LinkedHashMap。我想要的是得到具有最佳“值”的键。最好的“值”是smalles数,在本例中为-1。 是否有一个选项可以将键[1,2,5,4]和[1,2,4,4]返回到int[][]中?例如,如果最佳值为3,并且出现了5次,则应返回5个键。仅对一个最佳值相等。 我怎么能
[1,2,3,4] , 5
[1,3,3,4] , 2
[1,2,5,4] , -1
[1,2,4,4] , -1
我想对这个hashmap进行排序,它成功了!我得到了一个LinkedHashMap
。我想要的是得到具有最佳“值”的键。最好的“值”是smalles数,在本例中为-1。
是否有一个选项可以将键[1,2,5,4]和[1,2,4,4]
返回到int[][]
中?例如,如果最佳值为3,并且出现了5次,则应返回5个键。仅对一个最佳值相等。
我怎么能这么做
HashMap<int[], Double> hashMap = new HashMap<int[], Double>();
value = sortHashMap(hashMap);
int[][] bestKey;
// bestkey = value.getTheKeysWithTheBestValue // how could I do that? :(
// bestKey should be
// [ [1,2,5,4], [1,2,4,4] ]
private LinkedHashMap<int[], Double> sortHashMap(HashMap<int[], Double> hashMap) {
List<Entry<int[], Double>> list = new ArrayList<>(hashMap.entrySet());
list.sort(Entry.comparingByValue());
return list.stream().collect(Collectors.toMap(Entry::getKey, Entry::getValue,
(key1, key2) -> key2, LinkedHashMap::new));
}
HashMap HashMap=newhashmap();
值=sortHashMap(hashMap);
int[]bestKey;
//bestkey=value.getTheKeysWithTheBestValue//我该怎么做(
//最佳答案应该是
// [ [1,2,5,4], [1,2,4,4] ]
私有LinkedHashMap sortHashMap(HashMap HashMap){
List List=newarraylist(hashMap.entrySet());
list.sort(Entry.comparingByValue());
return list.stream().collect(Collectors.toMap)(条目::getKey,条目::getValue,
(key1,key2)->key2,LinkedHashMap::new));
}
总体思路:
- 反复浏览列表
- 如果当前值为“更好”,则将该值另存为“最佳”,并将该值的键存储在ArrayList“best keys”中
- 如果当前值为“更差”,则继续下一步
- 如果当前值等于当前“最佳”值,则将该键附加到“最佳键”列表中
Collections.min(yourMap.values())
获取min
值,在映射的条目集上进行流式处理,并筛选与min
值具有相同值的条目,将条目映射到键并收集到数组:
int[][] bestKeys = yourMap.entrySet()
.stream()
.filter(entry -> entry.getValue().equals(Collections.min(myMap.values())))
.map(Map.Entry::getKey)
.toArray(int[][]::new);
我试过了,但没有成功:(你有没有可能为你的解决方案为我创建代码?@Kazim你有相同的想法并已经实现了吗?在这种情况下,在你的问题中发表你的尝试。该解决方案有什么不起作用?请注意,这会计算
Collections.min(myMap.values())
n次,表示总体为O(n^2),预先计算最小值一次是最好的方法。但即使这样,你也要在地图上迭代两次,而不是只迭代一次。@luk2302你完全正确。我只是想给出一个起点,并简洁地给出答案。我将重构和改进留给OP。不过,谢谢你指出这一点。