我有一个 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/