Java 如何使用';最佳';LinkedHashMap中的值

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个键。仅对一个最佳值相等。 我怎么能

我有一个问题: 我的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个键。仅对一个最佳值相等。 我怎么能这么做

 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。不过,谢谢你指出这一点。