2016-07-25 5 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([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

parameterMapを呼び出さずにrequest.getParameter( "wf_block_id []")を使用しようとしています – 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} 
関連する問題