从Java

时间:2017-11-07 16:52:24

标签: java hashmap key multimap

我有一个Integer和List of String []的多重映射。在这里,我需要根据键获得多图的最高10个值。

我试图以类似的方式实现它,如果键和值如下,

   Key   Value
    3     [0,0],[1,0],[0,1]
    6     [0,1],[1,1],[0,0]
    1     [1,0],[1,1],[0,1],[0,0]
    2     [1,1],[0,0]

现在我必须根据密钥获得最高的10个值。

由于第一个最高密钥为6,因此必须获得6 - >的所有值。 ([0,1],[1,1],[0,0])

接下来获得下一个最高键3的剩余值,即 - > ([0,0],[1,0],[0,1])

接下来获得下一个最高键2的剩余值,即 - > ([1,1],[0,0])

接下来获得下一个最高键1的剩余值,即 - > ([1,0],[1,1])。

因为我只需要10个值,所以我只需从键1中选择2个值,因为(3个值[来自键6] + 3个值[来自键3] + 2个值[来自键2] + 2个来自键2键1)总共10个值。

这是我的代码:

Map<Integer, List<String[]>> outdoorElements = new HashMap<Integer, List<String[]>>();
putObjects(outdoorElements,EvaluationCount,schedules);

private static void putObjects (Map<Integer, List<String[]>> outdoorElements, Integer key, String[] value) {
    List<String[]> myClassList = outdoorElements.get(key);
    if(myClassList == null) {
        myClassList = new ArrayList<String[]>();
        outdoorElements.put(key, myClassList);
    }
    myClassList.add(value);
}

我正在努力学习如何获得价值观。真的很感激,如果有人能引导我通过这个。

1 个答案:

答案 0 :(得分:1)

创建树形图并将比较器设置为反向顺序。 创建一个空列表 循环遍历树形图中的每个值,并添加一个检查,检查该列表(您创建的空列表)大小是否小于10,如果是,则向列表中添加值。

      Map<Integer, List<String>> map = new TreeMap<>(Comparator.reverseOrder());
    map.put(1, Arrays.asList("1", "2", "3"));
    map.put(10, Arrays.asList("4", "5", "6", "7"));
    map.put(5, Arrays.asList("8", "9"));
    map.put(110, Arrays.asList("10", "11", "12", "13", "14", "15", "16"));
    int max = 10;
    List<String> tenHighestValue = new ArrayList<>();
    map.values().forEach(list -> {
        if (tenHighestValue.size() < max) {
            list.forEach(str -> {
                if (tenHighestValue.size() < max) {
                    tenHighestValue.add(str);
                }
            });
        }
    });
    System.out.println(tenHighestValue);

我希望有帮助