我想从list1中删除list2元素并返回list1

时间:2018-03-12 02:21:07

标签: java arrays arraylist java-8

我有两个列表

List<myObject> list1 = new ArrayList<>();

list1.add("544");
list1.add("545");
list1.add("546");
list1.add("547");
list1.add("548");
list1.add("549");  

List<myObject> list2 = new ArrayList<>();
list2.add("547");
list2.add("548");

现在我想从list1中删除list2并返回list1。所以我的最终返回列表看起来像

List<myObject> list1 = new ArrayList<>();
list1.add("544");
list1.add("545");
list1.add("546");
list1.add("549"); 

我想在Java8中这样做。我在java7中做到了它并且工作正常但我想在Java8中使用它。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:3)

方法1

您可以使用removeAll方法从其他列表中删除一个列表中的项目。

要获得重复项,您可以使用retainAll方法,尽管您使用该方法的方法也很好(并且可能更有效)。

list1.removeAll(列表2);

方法2

您可以使用org.apache.commons.collections.ListUtils并在一行中创建您想要的所有内容。

List resultList = ListUtils.subtract(list, list2);

方法3

对于Java 8,您可以使用Streams:

List<Integer> diff = list1.stream()
                          .filter(i -> !list2.contains(i))
                          .collect (Collectors.toList());