java8-stream-flatMap方法简单使用

本文介绍了Java8中StreamAPI的新特性,特别是flatMap方法的使用。通过示例展示了如何将多层结构的数据流扁平化,以及在处理List<List<String>>、List<Set<String>>等复杂结构时的应用,还包括flatMapToInt的案例。文章强调了flatMap在处理嵌套集合时的便利性,可用于高效地合并和转换数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java8-stream-flatMap方法简单使用


简述

在JDK8开始,列表操作新增了一新特性Stream流式操作,Stream中提供了非常多的API供大家使用,灵活的使用这些API,可以非常的方便且优美的实现我们的代码逻辑;

其中,flatMap()方法也是其中的API,flatMap()简单来说就是将多个stream流合并成一个stream,流变得扁平化, 当然你也可以在合并的时候结合其他的API做一些过滤或者转换之类的,如filter,下面详细阐述一下。

案例

1、先来一个简单的使用案例:
String[][]生成流,不用flatMap扁平化处理,依然可以使用 filter,map,collect对流做操作

public class StringArrayFlatMap {
    public static void main(String[] args) {
        String[][] data = new String[][]{{"a", "b"}, {"c", "d"}, {"e", "f"}};
        String[] s = new String[] {"a","b"};
        System.out.println(Arrays.toString(s));

        //Stream<String[]>
        Stream<String[]> temp = Arrays.stream(data);
        //filter a stream of string[], and return a string[]?
        List<String[]> list = temp
                .filter(x -> "a".equals(x[0]))
                .collect(Collectors.toList());

        list.forEach(c-> System.out.println(Arrays.toString(c)));
    }
}

2、List<Set<String>>案例:
Stream<Set<String>>,不用flatMap扁平化处理,依然可以使用 filter,map,collect对流做操作

public class StringSetFlatMap {
    public static void main(String[] args) {
        Student obj1 = new Student();
        obj1.setName("mkyong");
        obj1.addBook("Java 8 in Action");
        obj1.addBook("Spring Boot in Action");
        obj1.addBook("Effective Java (2nd Edition)");

        Student obj2 = new Student();
        obj2.setName("zilap");
        obj2.addBook("Learning Python, 5th Edition");
        obj2.addBook("Effective Java (2nd Edition)");

        List<Student> list = new ArrayList<>();
        list.add(obj1);
        list.add(obj2);
        //filter a stream of string[], and return a string[]?

        List<Set<String>> collect = list.stream()   //Stream<Student>
                .map(Student::getBook)              //Stream<Set<String>>
                .filter(set -> set.contains("Java 8 in Action")) //Stream<Set<String>>
                .distinct()
                .collect(Collectors.toList());
        collect.forEach(System.out::println);
    }
}

3、List<List<String>>案例:
Stream<List<String>>,flatMap扁平化处理流

public class StreamFlatMap {
    public static void main(String[] args) {

        Student obj1 = new Student();
        obj1.setName("mkyong");
        obj1.addBook("Java 8 in Action");
        obj1.addBook("Spring Boot in Action");
        obj1.addBook("Effective Java (2nd Edition)");

        Student obj2 = new Student();
        obj2.setName("zilap");
        obj2.addBook("Learning Python, 5th Edition");
        obj2.addBook("Effective Java (2nd Edition)");

        List<Student> list = new ArrayList<>();
        list.add(obj1);
        list.add(obj2);

        Stream<String> stringStream = list.stream()   //Stream<Student>
                .map(Student::getBook)      //Stream<Set<String>>
                .flatMap(x -> x.stream())   //Stream<String>
                .distinct(); //Stream<String>
        stringStream.forEach(System.out::println);

        List<String> collect =
                list.stream()                       //Stream<Student>
                        .map(Student::getBook)      //Stream<Set<String>>
                        .flatMap(x -> x.stream())   //Stream<String>
                        .distinct()                 //Stream<String>
                        .collect(Collectors.toList());

        collect.forEach(x -> System.out.println(x));

    }
}

4、flatMapToInt 案例

public class StreamIntFlatMap {
    public static void main(String[] args) {
        int[] intArray = {1, 2, 3, 4, 5, 6};

        //1. Stream<int[]>
        Stream<int[]> streamArray = Stream.of(intArray);
        //2. Stream<int[]> -> flatMap -> IntStream
        IntStream intStream = streamArray.flatMapToInt(Arrays::stream);

        intStream.forEach(System.out::println);

    }
}

参考

https://blog.youkuaiyun.com/Hatsune_Miku_/article/details/73435618

Stream<String[]>		-> flatMap ->	Stream<String>
Stream<Set<String>>	-> flatMap ->	Stream<String>
Stream<List<String>>	-> flatMap ->	Stream<String>
Stream<List<Object>>	-> flatMap ->	Stream<Object>

{[1,2],[3,4],[5,6]}  - > flatMap  - > [1,2,3,4,5,6]
{['a','b'],['c','d'],['e','f']}  - > flatMap  - > ['a','b','c' D”, 'E', 'F']
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值