Java计算数组的所有值并将其存储在数组中

时间:2016-07-25 10:29:19

标签: java arrays

我想计算数组的值并将其保存到数组中。在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()相同的结果。

3 个答案:

答案 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(),你会看到