编写一个java程序或函数来计算数组中每个元素的出现次数。例如,如果 {12, 9, 12, 9, 10, 9, 10, 11}
是输入数组,则每个元素出现的次数为 {12:2, 9:3, 10:2, 11:1}
。
答案 0 :(得分:3)
您可以使用 Map
:
public static Map<String, Integer> histogram(String[] arr) {
Map<String, Integer> map = new HashMap<>();
for(String item : arr)
map.put(item, map.getOrDefault(item, 0) + 1);
return map;
}
答案 1 :(得分:2)
有多种方法可以使用 LinkedHashMap
来保持插入顺序:
Collectors.groupingBy
+ Collectors.counting()
:static Map<Integer, Long> frequencyCounting(int ... arr) {
return Arrays.stream(arr)
.boxed()
.collect(Collectors.groupingBy(
i -> i, LinkedHashMap::new, Collectors.counting()
));
}
Collectors.groupingBy
+ Collectors.summingInt
:static Map<Integer, Integer> frequencySumming(int ... arr) {
return Arrays.stream(arr)
.boxed()
.collect(Collectors.groupingBy(
i -> i, LinkedHashMap::new, Collectors.summingInt(i -> 1)
));
}
Collectors.toMap
static Map<Integer, Integer> frequencyMap(int ... arr) {
return Arrays.stream(arr)
.boxed()
.collect(Collectors.toMap(
x -> x, x -> 1, Integer::sum, LinkedHashMap::new
));
}
for
循环和 Map::merge
函数static Map<Integer, Integer> frequencyMapMerge(int ... arr) {
Map<Integer, Integer> map = new LinkedHashMap<>();
for (int i : arr) {
map.merge(i, 1, Integer::sum);
}
return map;
}
Map::compute
static Map<Integer, Integer> frequencyMapCompute(int ... arr) {
Map<Integer, Integer> map = new LinkedHashMap<>();
for (int i : arr) {
map.compute(i, (k, prev) -> null == prev ? 1 : prev + 1);
}
return map;
}
Map.put + computeIfAbsent
static Map<Integer, Integer> frequencyMapCompute(int ... arr) {
Map<Integer, Integer> map = new LinkedHashMap<>();
for (int i : arr) {
map.put(i, map.computeIfAbsent(i, v -> 0) + 1);
}
return map;
}