Удаление дубликатов метода 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]

Надеюсь, это поможет.

Другие вопросы по тегам