在许多编程任务中,您可能会遇到需要查找列表之间差异的情况。在比较记录集或进行数据评估时,这可能是常见的要求。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种不同方法。