Collectors.groupingBy и отображение для построения карты - PullRequest
0 голосов
/ 25 ноября 2018

Пожалуйста, посмотрите на код ниже.Мое намерение - получить Map<String, List<Integer>> через API потоков, используя groupingBy и mapping.Логика, которую нужно использовать для получения этой выходной карты, состоит в том, чтобы просто сгруппировать содержимое ArrayList al и подсчитать, сколько раз один и тот же элемент встречается.

Например, элемент A встречается дважды, поэтому я хочу получить карту с ключом в качестве A и значением как 2. Аналогичным образом для BI нужно видеть B в качестве ключа и 3 в качестве значения.Я просто не знаю, как реализовать функцию отображения для этого.Я смог написать группировку.Могу ли я получить помощь в заполнении лямбды, где у меня есть вопросительные знаки (????).

public static void main(String[] args) {
    ArrayList<String> al = new ArrayList<>();
    al.add("A");
    al.add("A");
    al.add("B");
    al.add("B");
    al.add("B");
    al.add("V");
    al.add("V");
    al.add("C");
    al.add("C");
    System.out.println(
             al.stream()
             .collect(groupingBy(Function.identity(), mapping(??????, toList()))));
}

1 Ответ

0 голосов
/ 25 ноября 2018

Вы можете сделать это так,

Map<String, Long> keyCountMap = al.stream()
        .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

Обратите внимание на использование нижестоящего коллектора для вычисления количества.

...