我有一个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);
}
我正在努力学习如何获得价值观。真的很感激,如果有人能引导我通过这个。
答案 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);
我希望有帮助