在Java编码过程中可能会遇到这个场景:遍历一个列表,对列表中的属性进行转换、赋值等操作形成我们想要的一个新列表。通常我们的常规思路就是直接使用for循环。在Java8引入lambda表达式后我们可以使用stream流链式处理的方式,形成新流来达到预期效果。

stream操作比较多,这里主要针对map()举出下面三个列子来体验stream().map().collect(Collectors.toList())对于集合元素处理的用法。

package com.base.labguage.java8;

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

public class StreamMap {

    private static class People{
        private String name;
        private Integer age;
        private String address;
		
        // 只给出构造方法,忽略get/set细节
        public People(String name, Integer age, String address) {
            this.name = name;
            this.age = age;
            this.address = address;
        }

    }

    public static class PeoplePub{
        
        private String name;
        private Integer age;

        // 只给出构造方法,忽略get/set细节
        public PeoplePub(String name, Integer age) {
            this.name = name;
            this.age = age;
        }
        
        // 重写toString方法
        public String toString(){
            return "(" + this.name + "," + this.age + ")";

        }

    }

    public static void main(String[] args) {

        List<People> peoples = Arrays.asList(
                new People("zs", 25, "cs"),
                new People("ls", 28, "bj"),
                new People("ww", 23, "nj")
        );

        // List -> String
        List<String> names = peoples.stream().map(p -> p.getName()).collect(Collectors.toList());
        // stream流实现英文字母转大写
        List<String> upNames = names.stream().map(String::toUpperCase).collect(Collectors.toList());
        // stream流实现数字乘倍数
        List<Integer> ages = peoples.stream().map(p -> p.getAge() * 2).collect(Collectors.toList());
        // list - > new List
        List<PeoplePub> peoplePubs = peoples.stream().map(p -> {
            return new PeoplePub(p.getName(), p.getAge());
        }).collect(Collectors.toList());

        System.out.println("to print upnames List : " + upNames);
        System.out.println("to print ages List : " + ages);
        System.out.println("to print new people List" + peoplePubs.toString());

    }

}

控制台打印结果:

to print upnames List : [ZS, LS, WW]
to print ages List : [50, 56, 46]
to print new people List[(zs,25), (ls,28), (ww,23)]
道友可以在博客下方留言互相探讨学习或者关注公众号fairy with you了解更多,欢迎来撩!

在这里插入图片描述

注:本博客仅用于交流学习,不用于任何商业用途,欢迎思维碰撞。
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐