删除重复的CollectionUtils.collat​​e方法

时间:2014-06-18 12:02:00

标签: java apache-commons-collection

我试图通过使用CollectionUtils.collat​​e方法找到两个集合的并集。此方法来自包 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.collat​​e 的第三个参数表示我不想要重复项。

另外,String duplicate 句子已被删除,但 test 仍在那里。

我可以通过简单地将结果集合放在 HashSet 中来解决这个问题,但我想知道我做错了什么。

谢谢。

1 个答案:

答案 0 :(得分:1)

collat​​e方法需要两个已排序的集合。 CollectionUtils #collat​​e的java文档说:将两个已排序的集合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]

我希望这会有所帮助。