получить дубликаты значений из Arraylist <String>, а затем получить эти элементы в другом Arraylist - PullRequest
0 голосов
/ 02 января 2019

У меня есть Arraylist, который содержит некоторые значения с дубликатами, я хочу собрать эти значения в другой Arraylist .... как

 Arraylist<String> one;   //contains all values with duplicates
  one.add("1");
  one.add("2");
  one.add("2");
  one.add("2");

Здесь я хочу получить все значения дубликатов в другом Arraylist...

Arraylist<String> duplicates;    //contains all duplicates values which is 2.

Мне нужны значения, которые больше или равны 3 .....

В настоящее время у меня нет решения для этого, пожалуйста, помогите мне узнать

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Вы также можете сделать это через поток:

List<String> duplicates = one.stream()
                .collect(Collectors.groupingBy(Function.identity(), counting()))
                .entrySet()
                .stream()
                .filter(e -> e.getValue() > 1)
                .map(Map.Entry::getKey)
                .collect(Collectors.toCollection(ArrayList::new));
0 голосов
/ 02 января 2019

Для этого можно использовать набор:

Set<String> set = new HashSet<>();
List<String> duplicates = new ArrayList<>();

for(String s: one) {
    if (!set.add(s)) {
        duplicates.add(s);
    }
}

Вы просто продолжаете добавлять все элементы в набор.Если метод add() возвращает значение false, это означает, что элемент не был добавлен в набор, т. Е. Он там уже существует.

Ввод: [1, 3, 1, 3, 7, 6]

, дубликаты: [1, 3]

РЕДАКТИРОВАНИЕ

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

List<String> collect = one.stream()
            .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
            .entrySet()
            .stream()
            .filter(e -> e.getValue() >= 3)
            .map(Map.Entry::getKey)
            .collect(Collectors.toList());

В основном вы собираете свой первоначальный список вкарта, где key - строка, а value - количество.Затем вы фильтруете эту карту для значений, число которых превышает 3, и собираете ее в список результатов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...