Java中查找两个列表之间差异的四种方法

在许多编程任务中,您可能会遇到需要查找列表之间差异的情况。在比较记录集或进行数据评估时,这可能是常见的要求。Java 提供了多种方法来有效地完成此任务。在本文中,我们将探索不同的方法来查找 Java 中两个列表之间的差异,并提供带有输出的示例程序。

1. 使用retainAll 和 removeAll:

import java.util.ArrayList;
import java.util.List;

public class ListDifferenceExample {
    public static void main(String[] args) {
        // Create two lists
        List<String> list1 = new ArrayList<>();
        list1.add(
"A");
        list1.add(
"B");
        list1.add(
"C");

        List<String> list2 = new ArrayList<>();
        list2.add(
"B");
        list2.add(
"C");
        list2.add(
"D");

       
// 寻找共同元素
        List<String> commonElements = new ArrayList<>(list1);
        commonElements.retainAll(list2);

       
// 查找列表 1 中的元素,但不在列表 2 中
        List<String> difference1 = new ArrayList<>(list1);
        difference1.removeAll(commonElements);

       
//查找列表 2 中的元素,但不包括列表 1 中的元素
        List<String> difference2 = new ArrayList<>(list2);
        difference2.removeAll(commonElements);

       
// Print the results
        System.out.println(
"Common elements: " + commonElements);
        System.out.println(
"Elements in list1 but not in list2: " + difference1);
        System.out.println(
"Elements in list2 but not in list1: " + difference2);
    }
}

2、Java 8 Streams:

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class ListDifferenceExample {
    public static void main(String[] args) {
        // Create two lists
        List<String> list1 = new ArrayList<>();
        list1.add(
"A");
        list1.add(
"B");
        list1.add(
"C");

        List<String> list2 = new ArrayList<>();
        list2.add(
"B");
        list2.add(
"C");
        list2.add(
"D");

       
// Find common elements
        List<String> commonElements = list1.stream()
                .filter(list2::contains)
                .collect(Collectors.toList());

       
// Find elements in list1 but not in list2
        List<String> difference1 = list1.stream()
                .filter(e -> !commonElements.contains(e))
                .collect(Collectors.toList());

       
// Find elements in list2 but not in list1
        List<String> difference2 = list2.stream()
                .filter(e -> !commonElements.contains(e))
                .collect(Collectors.toList());

       
// Print the results
        System.out.println(
"Common elements: " + commonElements);
        System.out.println(
"Elements in list1 but not in list2: " + difference1);
        System.out.println(
"Elements in list2 but not in list1: " + difference2);
    }
}

3、使用 Apache Commons Collections:
您可以使用 Apache Commons Collections 库查找两个列表之间的差异。

import org.apache.commons.collections4.CollectionUtils;

import java.util.ArrayList;
import java.util.List;

public class ListDifferenceExample {
    public static void main(String[] args) {
        // Create two lists
        List<String> list1 = new ArrayList<>();
        list1.add(
"A");
        list1.add(
"B");
        list1.add(
"C");

        List<String> list2 = new ArrayList<>();
        list2.add(
"B");
        list2.add(
"C");
        list2.add(
"D");

       
// Find common elements
        List<String> commonElements = new ArrayList<>(CollectionUtils.intersection(list1, list2));

       
// Find elements in list1 but not in list2
        List<String> difference1 = new ArrayList<>(CollectionUtils.subtract(list1, list2));

       
// Find elements in list2 but not in list1
        List<String> difference2 = new ArrayList<>(CollectionUtils.subtract(list2, list1));

       
// Print the results
        System.out.println(
"Common elements: " + commonElements);
        System.out.println(
"Elements in list1 but not in list2: " + difference1);
        System.out.println(
"Elements in list2 but not in list1: " + difference2);
    }
}

4、使用循环和条件检查
如果您更喜欢更手动的方法,您可以迭代一个列表的元素,并使用循环和条件检查检查它们是否存在于另一个列表中。这种方法允许更灵活地定制比较逻辑。

Import java.util.ArrayList;  
Import java.util.List;  
Public class ListDifferenceExample {  
    Public static void main(String[] args) {  
        List<Character> list1 = new ArrayList<>();  
        List1.add('A');  
        List1.add('B');  
        List1.add('C');  
        List1.add('D');  
        List<Character> list2 = new ArrayList<>();  
        List2.add('B');  
        List2.add('D');  
        List2.add('F');  
        List<Character> differences = new ArrayList<>();  
        For (Character element : list1) {  
            If (!list2.contains(element)) {  
                Differences.add(element);  
            }  
        }  
        System.out.println("Elements present in list1 but not in list2: " + differences);  
    }  
}  

查找两个列表之间的差异是许多编程场景中的常见要求。在本文中,我们探讨了在 Java 中完成这一任务的4种不同方法。