从Java中的多重映射中选择最高的10个键值
我有一个整数的多重映射和字符串[]的列表。在这里,我需要得到基于键的multimap的最高10个值 我试图以如下方式实现它,如果键和值如下所示从Java中的多重映射中选择最高的10个键值,java,hashmap,key,multimap,Java,Hashmap,Key,Multimap,我有一个整数的多重映射和字符串[]的列表。在这里,我需要得到基于键的multimap的最高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]、
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])的所有值
Next获取下一个最高键3的剩余值,即-->([0,0],[1,0],[0,1])
Next获取下一个最高键2的剩余值,即-->([1,1],[0,0])
接下来获取下一个最高键1的剩余值,即-->([1,0],[1,1])
因为我只需要10个值,所以我只能从键1中选择2个值,因为(3个值[来自键6]+3个值[来自键3]+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);
}
Map outdoorElements=new HashMap();
PutObject(户外元素、EvaluationCount、明细表);
私有静态对象(映射户外元素、整数键、字符串[]值){
List myClassList=outdoorElements.get(key);
如果(myClassList==null){
myClassList=新的ArrayList();
outdoorElements.put(key,myClassList);
}
添加(值);
}
我正在努力尝试如何获得这些值。如果有人能指导我,我将不胜感激 创建树映射并将比较器设置为相反顺序。 创建一个空列表 循环遍历树映射中的每个值,并添加一个检查,检查该列表(您创建的空列表)的大小是否小于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);
Map Map=newtreemap(Comparator.reverseOrder());
map.put(1,Arrays.asList(“1”、“2”、“3”);
map.put(10,数组.asList(“4”、“5”、“6”、“7”);
map.put(5,Arrays.asList(“8”,“9”));
map.put(110,数组.asList(“10”、“11”、“12”、“13”、“14”、“15”、“16”);
int max=10;
List tenHighestValue=new ArrayList();
map.values().forEach(列表->{
if(tenHighestValue.size(){
if(tenHighestValue.size()
我希望这会有所帮助您的问题是如何对密钥进行排序?或者如何获得前10个值?你会用树形图吗?保持一个数值?我是新手。因此,我被困在如何排序和获取@ajcIf值的问题上。如果使用树形图,键将被排序。您只需调用DegendingMap以在desc模式下对其进行排序,并遍历这些值。1) 把你的地图分类。()并对其进行迭代。2) 维护您获得的值的计数,一旦达到计数,您就可以中断代码并停止。感谢您的帮助。但它说lambda表达式在我的版本中不受支持。有没有其他不使用lambda表达式的方法?是的,可以使用正则for循环,循环映射中的值。