从Java中的多重映射中选择最高的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]、

我有一个整数的多重映射和字符串[]的列表。在这里,我需要得到基于键的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]、[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循环,循环映射中的值。