Удаление дубликатов метода CollectionUtils.collate
Я пытаюсь найти объединение двух коллекций с помощью метода CollectionUtils.collate. Этот метод происходит из пакета org.apache.commons.collections4
Вот часть кода:
Collection<String> tokensUnion2 = CollectionUtils.collate(
Arrays.asList(new String[]{"my", "sentence", "test", "for", "testing"}),
Arrays.asList(new String[]{"my", "sentence", "test", "is", "this"}),
false);
Ниже приведена коллекция результатов:
[my, sentence, test, for, test, is, testing, this]
Как видите, результирующая коллекция содержит дубликаты, хотя третий параметр CollectionUtils.collate указывает, что я не хочу дубликатов.
Плюс, строковое дублирующее предложение было удалено, но тест все еще там.
Я мог бы решить эту проблему, просто поместив полученную коллекцию в HashSet, но я хотел бы знать, что я сделал неправильно.
Спасибо.
1 ответ
Метод сортировки предполагает две отсортированные коллекции. Документ Java для CollectionUtils#collate гласит: объединяет две отсортированные коллекции a и b в один отсортированный список таким образом, что сохраняется естественный порядок элементов.
В вашем примере два списка, представленные в качестве аргументов, не отсортированы. Если вы измените код для сортировки списка, как
List<String> list1 = Arrays.asList(new String[] { "my", "sentence", "test", "for", "testing" });
List<String> list2 = Arrays.asList(new String[] { "my", "sentence", "test", "is", "this" });
Collections.sort(list1);
Collections.sort(list2);
Collection<String> tokensUnion2 = CollectionUtils.collate(list1, list2, false);
Это вернет вам отсортированную коллекцию, которая не будет иметь дубликатов
[for, is, my, sentence, test, testing, this]
Надеюсь, это поможет.