获取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、更为灵活的处理方式。开发者可以根据具体的需求和场景,选择最适合的方法来实现。了解和掌握这些方法,能够帮助开发者在实际开发中更高效地处理集合相关的问题。

云服务器/高防CDN推荐

蓝易云国内/海外高防云服务器推荐


免备案五网CN2云服务器:www.tsyvps.com

蓝易云安全企业级高防CDN:www.tsycdn.com

持有增值电信营业许可证:B1-20222080【资质齐全】

蓝易云香港五网CN2 GIA/GT精品网络服务器。拒绝绕路,拒绝不稳定。

蓝易云是一家专注于香港及国内数据中心服务的提供商,提供高质量的服务器租用和云计算服务、包括免备案香港服务器、香港CN2、美国服务器、海外高防服务器、国内高防服务器、香港VPS等。致力于为用户提供稳定,快速的网络连接和优质的客户体验。
最后修改:2024 年 04 月 08 日
如果觉得我的文章对你有用,请随意赞赏