Как создать уникальный список значений в Java? - PullRequest
0 голосов
/ 10 ноября 2018

Я пытаюсь создать список, который состоит только из уникальных значений.

String[] arr = {"5", "5", "7", "6", "7", "8", "0"};
    List<String> uniqueList = new ArrayList<String>(new HashSet<String>( Arrays.asList(arr) ));
    System.out.println( uniqueList );

Что я ожидаю в качестве выхода: 6,8,0. Итак, если дубликаты существуют, я хочу удалить их обоих. HashSet удаляет только дубликаты, поэтому каждое значение встречается только один раз. Однако я хочу удалить оба числа, чтобы в итоге получился список, в котором есть только те числа, которые встречаются один раз в исходном списке.

Ответы [ 3 ]

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

Еще одна возможность с Stream:

List<String> arr1 = Arrays.asList(arr).stream()
                   .filter(i -> Collections.frequency(Arrays.asList(arr), i)  < 2)
                   .collect(Collectors.toList());
arr1.forEach(System.out::println);

, которая создаст фильтр для всех элементов, встречающихся более одного раза, используя Collections::frequency.Который возвращает List:

[6, 8, 0]
0 голосов
/ 10 ноября 2018

Еще одно возможное решение - собрать данные списка в набор, а затем снова вернуться к списку.

String[] arr = {"5", "5", "7", "6", "7", "8", "0"};

List<String> stringList = Arrays.stream(arr).collect(Collectors.toSet()).stream().collect(Collectors.toList());

for (String s : stringList) {
     System.out.println(s);
}
0 голосов
/ 10 ноября 2018

Одним из решений было бы создание частоты Map и сохранение только тех ключей, значение которых равно 1:

String[] arr = {"5", "5", "7", "6", "7", "8", "0"};

Arrays.stream(arr)
      .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
      .entrySet()
      .stream()
      .filter(e -> e.getValue() == 1)
      .map(Map.Entry::getKey)
      .collect(Collectors.toList()));

Одно из возможных значений этого List:

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