代码小妙招:用Java轻松获取List交集数据

简介: 在Java中获取两个 `List`的交集可以通过 `retainAll`方法和Java 8引入的流操作来实现。使用 `retainAll`方法更为直接,但会修改原始 `List`的内容。而使用流则提供了不修改原始 `List`、更为灵活的处理方式。开发者可以根据具体的需求和场景,选择最适合的方法来实现。了解和掌握这些方法,能够帮助开发者在实际开发中更高效地处理集合相关的问题。

获取Java中 List集合的交集是一个常见的需求。在日常开发中,我们经常需要寻找两个集合中同时存在的元素。幸运的是,Java提供的集合框架极大地简化了这一操作。以下是两种常见的方式来获取 List集合的交集,这两种方式既简单又高效。

方法一:使用retainAll()方法

Java的 List接口提供了 retainAll(Collection<?> c)方法,它可以用来获取两个 List的交集。该方法会修改调用它的 List集合,使之仅保留包含在指定集合中的元素,也就是两个集合的交集。

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

public class ListIntersection {
    public static void main(String[] args) {
        List<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
        List<Integer> list2 = new ArrayList<>(Arrays.asList(4, 5, 6, 7, 8));

        list1.retainAll(list2);

        System.out.println(list1); // 输出交集:[4, 5]
    }
}

这种方法简单且直接,但需要注意的是,它会改变 list1的内容。如果需要保留原始列表,则可以在调用 retainAll之前先进行复制。

方法二:使用流(Java 8及更高版本)

Java 8 引入的流(Stream)API 为处理集合提供了一个高级且灵活的方式。通过流,我们可以轻松地进行复杂的操作,比如过滤、映射、归约等。为获取两个 List的交集,我们可以使用流的 filter方法来过滤元素,然后通过 collect方法来收集结果。

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

public class ListIntersection {
    public static void main(String[] args) {
        List<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
        List<Integer> list2 = new ArrayList<>(Arrays.asList(4, 5, 6, 7, 8));

        List<Integer> intersect = list1.stream()
                                        .filter(list2::contains)
                                        .collect(Collectors.toList());

        System.out.println(intersect); // 输出交集:[4, 5]
    }
}

使用流的好处是它不会改变原始集合的内容,同时提供了更大的灵活性。比如,通过使用不同的过滤条件和映射操作,我们可以轻松地实现更复杂的集合处理逻辑。

结论

在Java中获取两个 List的交集可以通过 retainAll方法和Java 8引入的流操作来实现。使用 retainAll方法更为直接,但会修改原始 List的内容。而使用流则提供了不修改原始 List、更为灵活的处理方式。开发者可以根据具体的需求和场景,选择最适合的方法来实现。了解和掌握这些方法,能够帮助开发者在实际开发中更高效地处理集合相关的问题。

目录
相关文章
|
2月前
|
Java 开发工具
【Azure Storage Account】Java Code访问Storage Account File Share的上传和下载代码示例
本文介绍如何使用Java通过azure-storage-file-share SDK实现Azure文件共享的上传下载。包含依赖引入、客户端创建及完整示例代码,助你快速集成Azure File Share功能。
349 5
|
3月前
|
IDE Java 关系型数据库
Java 初学者学习路线(含代码示例)
本教程为Java初学者设计,涵盖基础语法、面向对象、集合、异常处理、文件操作、多线程、JDBC、Servlet及MyBatis等内容,每阶段配核心代码示例,强调动手实践,助你循序渐进掌握Java编程。
428 3
|
3月前
|
安全 Java 应用服务中间件
Spring Boot + Java 21:内存减少 60%,启动速度提高 30% — 零代码
通过调整三个JVM和Spring Boot配置开关,无需重写代码即可显著优化Java应用性能:内存减少60%,启动速度提升30%。适用于所有在JVM上运行API的生产团队,低成本实现高效能。
297 3
|
3月前
|
Java API 开发工具
【Azure Developer】Java代码实现获取Azure 资源的指标数据却报错 "invalid time interval input"
在使用 Java 调用虚拟机 API 获取指标数据时,因本地时区设置非 UTC,导致时间格式解析错误。解决方法是在代码中手动指定时区为 UTC,使用 `ZoneOffset.ofHours(0)` 并结合 `withOffsetSameInstant` 方法进行时区转换,从而避免因时区差异引发的时间格式问题。
208 3
|
2月前
|
Java 数据处理 API
为什么你的Java代码应该多用Stream?从循环到声明式的思维转变
为什么你的Java代码应该多用Stream?从循环到声明式的思维转变
248 115
|
2月前
|
安全 Java 编译器
为什么你的Java代码需要泛型?类型安全的艺术
为什么你的Java代码需要泛型?类型安全的艺术
179 98
|
3月前
|
Java
java入门代码示例
本文介绍Java入门基础,包含Hello World、变量类型、条件判断、循环及方法定义等核心语法示例,帮助初学者快速掌握Java编程基本结构与逻辑。
410 0
|
4月前
|
人工智能 监控 安全
智慧工地解决方案,java智慧工地程序代码
智慧工地系统融合物联网、AI、大数据等技术,实现对施工现场“人、机、料、法、环”的全面智能监控与管理,提升安全、效率与决策水平。
133 2
|
2月前
|
安全 Java 容器
告别繁琐判空:Optional让你的Java代码更优雅
告别繁琐判空:Optional让你的Java代码更优雅