获取不在多个列表中的所有元素

时间:2013-12-11 15:48:20

标签: java list

我有多个(三个或更多)列表,如:

[a, b, c, d, a];
[b, d, e, c, a];
[c, f, a];

现在我想要所有元素,这些元素可以在单个列表中,也可以在多个列表中,但不是在所有列表中! 以上示例的结果应为:

[b, d, e, f];

任何解决方案? 谢谢!

2 个答案:

答案 0 :(得分:0)

使用java.util.List,如果阵列使用Arrays.asList( arr );,然后使用list.contains( el );检查某些列表是否包含当前元素......

答案 1 :(得分:0)

您正在寻找retainAll方法来查找所有列表中的条目。其余的只是简单的收藏品。

在所有列表中列出项目列表后,使用Set(以确保丢弃重复项)以收集所有列表中的所有元素,然后使用removeAll使用您的条目列表出现在所有列表中。

public void test() {
  List<String> aList = new ArrayList<>(Arrays.asList("a", "b", "c", "d", "a"));
  List<String> bList = new ArrayList<>(Arrays.asList("b", "d", "e", "c", "a"));
  List<String> cList = new ArrayList<>(Arrays.asList("c", "f", "a"));
  // Not in all lists.
  List<String> inAll = new ArrayList<>(aList);
  inAll.retainAll(bList);
  inAll.retainAll(cList);
  // Unique results - all items in all lists.
  Set<String> result = new HashSet<>(aList);
  result.addAll(bList);
  result.addAll(cList);
  // But nothing that is in all lists.
  result.removeAll(inAll);
  System.out.println(result);
}