Stream流学习mapping


一、前言

在Java的Stream API中,mapping 是一个非常有用的中间操作,它可以将流中的元素映射成其他形式。通常与 Collectors.groupingBy 或者 Collectors.mapping 结合使用,用于对流中的元素进行转换和处理。

1. 基本用法

mapping 的基本用法是将流中的元素映射为另一种类型,然后可以结合其他收集器将映射后的结果收集起来。

例如,假设有一个 Person 类:

class Person {
    private String name;
    private int age;

    // 省略构造函数和getter/setter
}

现在我们想要将 Person 对象的名字映射为大写形式的列表:

List<Person> persons = Arrays.asList(
    new Person("Alice", 23),
    new Person("Bob", 25),
    new Person("Charlie", 30)
);

List<String> namesInUpperCase = persons.stream()
    .map(Person::getName) // 映射为名字的流
    .map(String::toUpperCase) // 将名字转换为大写形式
    .collect(Collectors.toList());

System.out.println(namesInUpperCase); // 输出 [ALICE, BOB, CHARLIE]

2. 结合 Collectors.mapping

Collectors.mapping 收集器允许我们在收集流中元素时,对流中的每个元素应用一个转换函数,并将转换后的结果收集起来。

例如,如果我们想要将 Person 对象按照年龄进行分组,并且每组只保留他们的名字:

Map<Integer, List<String>> namesByAge = persons.stream()
    .collect(Collectors.groupingBy(
        Person::getAge, // 按照年龄分组
        Collectors.mapping(Person::getName, Collectors.toList()) // 将名字映射并收集到列表中
    ));

System.out.println(namesByAge);

输出结果将会是按照年龄分组后的每个年龄组的人员名单列表。

3. 自定义转换函数

在一些情况下,可能需要自定义转换函数来将流中的元素映射为不同的形式。例如,将字符串转换为它们的长度:

List<String> words = Arrays.asList("apple", "banana", "orange");

List<Integer> wordLengths = words.stream()
    .map(String::length) // 将字符串映射为它们的长度
    .collect(Collectors.toList());

System.out.println(wordLengths); // 输出 [5, 6, 6]

这里使用了 map(String::length) 将每个字符串映射为它们的长度。

4.总结

mapping 在Java Stream API中是一个重要的操作,它使得我们能够对流中的元素进行灵活的转换和映射,从而更方便地处理和操作数据。结合其他操作如 groupingBy 或者 toList,可以实现复杂的数据处理需求,提高代码的简洁性和可读性。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

和烨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值