Java лямбда-выражение для подсчета уникальных объектов - PullRequest
0 голосов
/ 02 февраля 2019

Я настроил этот поток ниже и не могу использовать метод count () в .map.Только на фильтре.Но я не настроил ни одного условия фильтра.Как я могу сделать это на массиве строк для этого потока ниже?

Я хочу отсортировать строки с учетом регулярного выражения в replaceAll и получить уникальные строки и получить общее количество уникальных строк.

Stream newStream = Arrays.stream(arr)
                    .map(s -> s.replaceAll("[^a-z]", ""))
                    .distinct()

Ответы [ 2 ]

0 голосов
/ 03 февраля 2019

Я не уверен, что полностью понимаю ваше требование.Кажется, вы хотите List с отдельными строками, отсортированными после применения регулярного выражения к каждому элементу массива.Это List будет иметь как элементы, так и их количество:

List<String> list = Arrays.stream(arr)
    .map(s -> s.replaceAll("[^a-z]", ""))
    .distinct()
    .sorted()
    .collect(Collectors.toList());

Теперь, list содержит элементы.И если вы также хотите узнать, сколько элементов в нем содержится, просто используйте метод List.size:

int count = list.size();

РЕДАКТИРОВАТЬ: Если вам также необходимо Stream сстроки, измененные, уникальные и отсортированные, просто создайте новый Stream из list:

Stream<String> newStream = list.stream();
0 голосов
/ 02 февраля 2019

Если бы вы подсчитали количество distinct строк, вы можете сделать это следующим образом:

long countDistinct = Arrays.stream(arr)
        .map(s -> s.replaceAll("[^a-z]", ""))
        .distinct() // intermediate operation with unique strings as 'Stream' return type
        .count();   // terminal operation with count of such strings as return type
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...