0

我试图通过使用 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 的第三个参数表明我不想要重复项。

另外,字符串重复句子被消除了,但测试仍然存在。

我可以通过简单地将生成的集合放入HashSet来解决这个问题,但我想知道我做错了什么。

谢谢你。

4

1 回答 1

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]

我希望这有帮助。

于 2014-06-19T07:26:21.427 回答