我想计算数组的值并将其保存到数组中。在php中我们使用array_count_values。
$a=array("A","Cat","Dog","A","Dog");
print_r(array_count_values($a));
输出:
Array ( [A] => 2 [Cat] => 1 [Dog] => 2 )
我想在java中这样做。
Map<String, String[]> map = request.getParameterMap();
String[] wfBlockIds = map.get("wf_block_id[]");
Arrays.stream(wfBlockIds)
.collect(Collectors.groupingBy(s -> s))
.forEach((k, v) -> System.out.println(k+" => "+v.size() + " --" + v));
Java代码的输出是:
1469441140125 => 3 --[1469441140125, 1469441140125, 1469441140125]
1469441126299 => 2 --[1469441126299, 1469441126299]
我如何获得与数组中的array_count_values()相同的结果。
答案 0 :(得分:2)
请尝试以下代码:
Map<String, Integer> map = new HashMap<>();
for (String s : array) {
if (map.containsKey(s)) {
Integer v = map.get(s);
map.put(s, v+1);
} else {
map.put(s, 1);
}
}
答案 1 :(得分:1)
Altough Java数组只有int索引,你可以使用Map实现与PHP相同的功能。
以下代码生成类似于array_count_values
Map<String, Long> result = Stream.of("A", "Cat", "Dog", "A", "Dog")
.collect(groupingBy(Function.identity(), counting()));
System.out.println(result); //prints {A=2, Cat=1, Dog=2}
答案 2 :(得分:0)
您的代码没问题,但是您从请求参数获取的String数组包含3 *“1469441126299”和2 *“1469441140125”; 打印出你的request.getParameterMap(),你会看到