我试图通过使用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 duplicate 句子已被删除,但 test 仍在那里。
我可以通过简单地将结果集合放在 HashSet 中来解决这个问题,但我想知道我做错了什么。
谢谢。
答案 0 :(得分:1)
collate方法需要两个已排序的集合。 CollectionUtils #collate的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]
我希望这会有所帮助。