Stream管道流的map操作

1、Stream管道流map的基础用法

将集合中的每一个字符串,全部转换成大写:

List<String> alpha = Arrays.asList("Monkey", "Lion", "Giraffe", "Lemur");
List<String> collect = alpha.stream().map(String::toUpperCase).collect(Collectors.toList());
System.out.println(collect);

结果:

[MONKEY, LION, GIRAFFE, LEMUR]

map()函数不仅可以处理数据,还可以转换数据的类型:

List<Integer> lengths = alpha.stream()
        .map(String::length)
        .collect(Collectors.toList());
System.out.println(lengths);

结果:

[6, 4, 7, 5]
Stream.of("Monkey", "Lion", "Giraffe", "Lemur")
        .mapToInt(String::length)
        .forEach(System.out::println);

结果:

6
4
7
5

2、处理对象数据

将每一个Employee的年龄增加一岁并且将性别中的“M”换成“male”,F换成Female:

    Employee e1 = new Employee(1,23,"M","Rick","Beethovan");
                Employee e2 = new Employee(2,13,"F","Martina","Hengis");
                Employee e3 = new Employee(3,43,"M","Ricky","Martin");
                Employee e4 = new Employee(4,26,"M","Jon","Lowman");
                Employee e5 = new Employee(5,19,"F","Cristine","Maria");
                Employee e6 = new Employee(6,15,"M","David","Feezor");
                Employee e7 = new Employee(7,68,"F","Melissa","Roy");
                Employee e8 = new Employee(8,79,"M","Alex","Gussin");
                Employee e9 = new Employee(9,15,"F","Neetu","Singh");
                Employee e10 = new Employee(10,45,"M","Naveen","Jain");
                List<Employee> employees = Arrays.asList(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10);
    //使用map
    List<Employee> maped = employees.stream()
                    .map(e -> {
                        e.setAge(e.getAge() + 1);
                        e.setGender(e.getGender().equals("M")?"male":"female");
                        return e;
                    }).collect(Collectors.toList());
                System.out.println(maped);
    //使用peek
    maped = employees.stream()
                    .peek(e -> {
                        e.setAge(e.getAge() + 2);
                        e.setGender(e.getGender().equals("M")?"male":"female");
                    }).collect(Collectors.toList());
            System.out.println(maped);

peek函数是一种特殊的map函数,当函数没有返回值或者参数就是返回值的时候可以使用peek函数。

3、flatMap

map可以对管道流中的数据进行转换操作,但是如果管道中还有管道该如何处理?即:如何处理二维数组及二维集合类。
一个简单的需求:将“hello”,“world”两个字符串组成的集合,元素的每一个字母打印出来:

List<String> words = Arrays.asList("hello", "word");
        words.stream()
                .map(w -> Arrays.stream(w.split("")))
                .forEach(System.out::println);

结果:

java.util.stream.ReferencePipeline$Head@67424e82
java.util.stream.ReferencePipeline$Head@42110406

用map方法是做不到的,这个需求用map方法无法实现。map只能针对一维数组进行操作,数组里面还有数组,管道里面还有管道,它是处理不了每一个元素的。
而flatMap可以做到:

words.stream()
        .flatMap(w -> Arrays.stream(w.split("")))
        .forEach(System.out::println);

结果:

h
e
l
l
o
w
o
r
d

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

出世&入世

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

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

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

打赏作者

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

抵扣说明:

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

余额充值