有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何从LinkedHashMap获取具有“最佳”值的键

我有一个问题: 我的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。 有没有一个选项可以让int[][]返回键[1,2,5,4] and [1,2,4,4]?例如,如果最佳值为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));
    }

共 (2) 个答案

  1. # 1 楼答案

    总体思路:

    • 反复浏览列表
    • 如果当前值为“更好”,则将该值另存为“最佳”,并将该值的键存储在ArrayList“best keys”中
    • 如果当前值为“更差”,则继续下一步
    • 如果当前值等于当前“最佳”,则将该键附加到“最佳键”列表中
  2. # 2 楼答案

    使用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);