java8 flatMap常见用法

在 Java 8 中,flatMap 是 Stream API 提供的一个非常强大的方法,它结合了映射(map)和扁平化(flatten)两个操作。flatMap 主要用于将流中的每个元素转换为另一个流,然后将这些流合并成一个单一的流。这使得你可以处理嵌套结构的数据,如列表的列表、集合的集合等。

flatMap 的常见用法

1. 将嵌套集合扁平化

假设你有一个包含多个列表的列表,并希望将其合并为一个单一的列表:

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

public class FlatMapExample {
    public static void main(String[] args) {
        List<List<String>> nestedList = Arrays.asList(
            Arrays.asList("apple", "banana"),
            Arrays.asList("carrot", "date"),
            Arrays.asList("eggplant", "fig")
        );

        // 使用 flatMap 扁平化列表
        List<String> flatList = nestedList.stream()
            .flatMap(List::stream)
            .collect(Collectors.toList());

        System.out.println(flatList);
    }
}


//输出:
//[apple, banana, carrot, date, eggplant, fig]

2. 处理对象的嵌套属性

如果你有一个包含其他对象的集合,并希望提取这些对象中的特定字段或属性,可以使用 flatMap 来简化这一过程:

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

class Person {
    private String name;
    private List<String> hobbies;

    public Person(String name, List<String> hobbies) {
        this.name = name;
        this.hobbies = hobbies;
    }

    public List<String> getHobbies() {
        return hobbies;
    }
}

public class FlatMapExample {
    public static void main(String[] args) {
        List<Person> people = Arrays.asList(
            new Person("Alice", Arrays.asList("reading", "swimming")),
            new Person("Bob", Arrays.asList("gaming", "cooking")),
            new Person("Charlie", Arrays.asList("traveling"))
        );

        // 提取所有人的爱好并去重
        Set<String> uniqueHobbies = people.stream()
            .flatMap(person -> person.getHobbies().stream())
            .collect(Collectors.toSet());

        System.out.println(uniqueHobbies);
    }
}



//输出
//[reading, swimming, gaming, cooking, traveling]

3. 字符串分割

有时你需要处理字符串列表,并根据某个分隔符将每个字符串拆分成子字符串,然后将所有的子字符串合并成一个列表:

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

public class FlatMapExample {
    public static void main(String[] args) {
        List<String> sentences = Arrays.asList("Hello world", "Java 8 Stream API", "flatMap usage");

        // 分割句子为单词
        List<String> words = sentences.stream()
            .flatMap(sentence -> Arrays.stream(sentence.split(" ")))
            .collect(Collectors.toList());

        System.out.println(words);
    }
}


//输出:
//[Hello, world, Java, 8, Stream, API, flatMap, usage]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值