java - 比较和排序 hashmap java 中值的数组列表

标签 java arraylist hashmap key-value

我有一个 HashMap

Map<String, ArrayList<String>> games = new hashmap<String, Arraylist<String>>();

它包含名称作为键和游戏列表作为值。 像这样:

A= [ cricket, soccer, tennis, baseball]
B= [soccer, badminton, rugby]
C= [cricket, badminton]
D= [rugby, cricket, soccer]
E= [cricket, baseball]
F= [tennis, rugby]

现在我想计算每个值(板球、足球等)的出现次数 根据值的出现情况,仅将一个值分配给键。 在这里,板球出现了 4 次,足球出现了 3 次,依此类推。 并比较每个键的值并检查哪些值出现了多少次。 然后我想分配出现次数最多的值。 那就是我想要一个像这样的 HashMap :

A= [ cricket] // because among its 4 values, cricket has occured maximum times.
B= [soccer] // among its 3 values, soccer has occured maximum times.
C= [cricket]
D= [cricket]
E= [cricket]
F= [rugby] // among its 2 values, rugby has occured maximum times which is 3.

等等... 我不知道如何解决这种情况。所以,请帮助我解决这个问题 提供详细信息。 谢谢

最佳答案

假设这个算法可以帮助你。

public void testAlgorithm(){
        Map<String, List<String>> map = this.generateDatasource();
        Map<String, Integer> numberMap = this.calculateHappeds(map);
        Map<String, String> rstMap = new HashMap<String, String>();
        for (String key : map.keySet()) {
            List<String> sports = map.get(key);
            Integer index = 0;
            for (int i = 0; i < sports.size(); i++) {
                if (numberMap.get(sports.get(i)) > numberMap.get(sports.get(index))) {
                    index = i;
                }
            }
            rstMap.put(key, sports.get(index));
        }
        for (String key : rstMap.keySet()) {
            System.out.println(key + " = " + " [ " + rstMap.get(key) + " ]");
        }
    }

    private Map<String, Integer> calculateHappeds(Map<String, List<String>> map) {
        Map<String, Integer> calculate = new HashMap<String, Integer>();
        for (String key : map.keySet()) {
            List<String> sports = map.get(key);
            for (String sport : sports) {
                if (calculate.containsKey(sport)) {
                    Integer count = calculate.get(sport);
                    count += 1;
                    calculate.put(sport, count);
                }else {
                    calculate.put(sport,1);
                }
            }
        }
        return calculate;
    }

    private Map<String, List<String>> generateDatasource() {
        Map<String, List<String>> map = new HashMap<String, List<String>>();
        List<String> a = new ArrayList<String>();
        a.add("cricket");
        a.add("soccer");
        a.add("tennis");
        a.add("baseball");
        map.put("A", a);

        List<String> b = new ArrayList<String>();
        b.add("soccer");
        b.add("badminton");
        b.add("rugby");
        map.put("B", b);

        List<String> c = new ArrayList<String>();
        c.add("cricket");
        c.add("badminton");
        map.put("C", c);

        List<String> d = new ArrayList<String>();
        d.add("rugby");
        d.add("cricket");
        d.add("soccer");
        map.put("D", d);

        List<String> e = new ArrayList<String>();
        e.add("cricket");
        e.add("baseball");
        map.put("E", e);

        List<String> f = new ArrayList<String>();
        f.add("tennis");
        f.add("rugby");
        map.put("F", f);
        return map;
    }

因为rstMap是map,所以输出是

D =  [ cricket ]
E =  [ cricket ]
F =  [ rugby ]
A =  [ cricket ]
B =  [ soccer ]
C =  [ cricket ]

关于java - 比较和排序 hashmap java 中值的数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26923155/

相关文章:

java - 如何从Java 7中的.txt文件提取主机名和主机请求的出现?

java - jsp :include 缺少库

java - 使用用户输入更新 MySQL 上的数据记录

Java ArrayList不保留元素

Java/Android : adding/removing values to/from array by clicking a button?

java - Android ArrayIndexOutOfBoundsException 和 AbsListViewRecycleBin.addScrapView

java - 使用嵌套的 HashMap 是一种不好的做法吗?

java - Jersey 2 使类/对象在整个应用程序中持续存在

java - Android 收不到网络数据?

java - 如果我同时(从多个线程)写入 java.util.HashMap,可能发生的最糟糕的事情是什么?