2016-07-25 63 views
0

我想計算一個數組的值並將其保存到一個數組中。在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

回答

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

你的代碼是好的,但你是從請求參數獲取字符串數組包含3 *「1469441126299」和2 *「1469441140125」; 打印出你的request.getParameterMap(),你會看到

+0

嘗試使用request.getParameter(「wf_block_id []」)而不調用parameterMap – Elgayed

1

除了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} 
相關問題