2016-07-25 2 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.

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

Что вы хотите тип выхода быть? Массив чего? – 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

Ваш код хорошо, но массив строк, которые вы получаете от запроса Params содержит 3 * "1469441126299" и 2 * "1469441140125"; Распечатайте свой запрос.getParameterMap(), и вы увидите, что

+0

попробуйте использовать request.getParameter ("wf_block_id []") без вызова параметраMap – Elgayed

1

У массивов Java Alt есть только индексы int, вы можете достичь той же функции, что и в PHP с помощью Map.

Следующий код создает нечто похожее на 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}