Java Stream API 提供了一种非常方便的方式来比较两个 List 的差异,并取出不同的对象

Java Stream API 提供了一种非常方便的方式来比较两个 List 的差异,并取出不同的对象。这可以通过使用 distinct() 和 filter() 方法来实现。

假设我们有两个 List,一个是 list1,另一个是 list2,我们想找出 list1 中存在但 list2 中不存在的元素。

以下是如何实现的示例代码:

java 复制代码
import java.util.Arrays;  
import java.util.List;  
import java.util.stream.Collectors;  
  
public class Main {  
    public static void main(String[] args) {  
        List<String> list1 = Arrays.asList("Apple", "Banana", "Cherry", "Date", "Elderberry");  
        List<String> list2 = Arrays.asList("Apple", "Banana", "Cherry", "Fig", "Grape");  
  
        List<String> diffList1 = list1.stream()  
                                      .filter(s -> !list2.contains(s))  
                                      .collect(Collectors.toList());  
  
        System.out.println("Difference in list1: " + diffList1);  
    }  
}

在这个例子中,我们使用了 stream() 方法来创建一个从 list1 的元素到流的管道。然后,我们使用了 filter() 方法来过滤出 list2 中不存在的元素。最后,我们使用 collect() 方法将结果收集到一个新的 List 中。输出结果将是 list1 中存在但 list2 中不存在的元素。

如果你想找出 list2 中存在但 list1 中不存在的元素,只需将上述代码中的 list1 和 list2 交换即可:

java 复制代码
import java.util.Arrays;  
import java.util.List;  
import java.util.stream.Collectors;  
  
public class Main {  
    public static void main(String[] args) {  
        List<String> list1 = Arrays.asList("Apple", "Banana", "Cherry", "Date", "Elderberry");  
        List<String> list2 = Arrays.asList("Apple", "Banana", "Cherry", "Fig", "Grape");  
  
        List<String> diffList2 = list2.stream()  
                                      .filter(s -> !list1.contains(s))  
                                      .collect(Collectors.toList());  
  
        System.out.println("Difference in list2: " + diffList2);  
    }  
}
相关推荐
梁同学与Android2 小时前
Android ---【内存优化】常见的内存泄露以及解决方案
android·java·内存泄漏
武子康3 小时前
Java-71 深入浅出 RPC Dubbo 上手 父工程配置编写 附详细POM与代码
java·分布式·程序人生·spring·微服务·rpc·dubbo
武子康5 小时前
Java-72 深入浅出 RPC Dubbo 上手 生产者模块详解
java·spring boot·分布式·后端·rpc·dubbo·nio
_殊途5 小时前
《Java HashMap底层原理全解析(源码+性能+面试)》
java·数据结构·算法
椰椰椰耶6 小时前
【Spring】拦截器详解
java·后端·spring
没有bug.的程序员7 小时前
JAVA面试宝典 - 《MyBatis 进阶:插件开发与二级缓存》
java·面试·mybatis
没有羊的王K9 小时前
SSM框架学习——day1
java·学习
又菜又爱coding9 小时前
安装Keycloak并启动服务(macOS)
java·keycloak
不知道叫什么呀9 小时前
【C】vector和array的区别
java·c语言·开发语言·aigc
wan_da_ren10 小时前
JVM监控及诊断工具-GUI篇
java·开发语言·jvm·后端