我正在尝试使用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的第三个参数表明我不希望重复,生成的集合也包含重复的内容。
另外,删除了String重复句子,但测试仍然存在。
我可以通过将结果集合放入HashSet中来解决此问题,但是我想知道自己做错了什么。
谢谢。
最佳答案
collate方法需要两个排序的集合。用于CollectionUtils#collate的Java文档说:将两个已排序的Collections a和b合并到一个已排序的List中,从而保留元素的自然顺序。
在您的示例中,作为参数提供的两个列表未排序。如果您修改代码以对列表进行排序,例如
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]
我希望这有帮助。