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

问题描述:

我想计算一个数组的值并将其保存到一个数组中。在php中,我们使用array_count_values来完成此操作。Java计算一个数组的所有值并将其存储在一个数组中

$a=array("A","Cat","Dog","A","Dog"); 
    print_r(array_count_values($a)); 

输出:

Array ([A] => 2 [Cat] => 1 [Dog] => 2) 

我想在java中这样做。 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)); 

输出是:

1469441140125 => 3 --[1469441140125, 1469441140125, 1469441140125] 
1469441126299 => 2 --[1469441126299, 1469441126299] 

如何我会得到相同的结果为array_count_values(),这将是一个数组。

+0

你想要的输出类型是什么东西?一个什么样的数组? – Eran

+0

输出将是包含wfBlockIds array.Array([A] => 2 [Cat] => 1 [Dog] => 2)元素的数组。 –

+1

请更新您的问题,而不是将注释放在注释中。 – GhostCat

试试下面的代码:

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); 
    } 
} 

你的代码是好的,但你是从请求参数获取字符串数组包含3 *“1469441126299”和2 *“1469441140125”; 打印出你的request.getParameterMap(),你会看到

+0

尝试使用request.getParameter(“wf_block_id []”)而不调用parameterMap – Elgayed

除了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}