Stream流的常见用法

前言:

        stream()流的方法是从Java 8 开始诞生的。它是基于Lamada表达式的产物。也可以简单的将stram流当做一个foreach来看。对于操作数组或集合更加方便。且更加安全。因为它相当于取到我们的数据源后又做了一层SQL操作,但是并不会改变数据源,而是创建了一个新的容器存放操作后的数据。

环境搭建:

        为了更符合业务。我们创建一个实体。

package org.java.demo;

import java.io.Serializable;

public class User implements Serializable {
    //用户ID
    private Long id;

    //用户姓名
    private String name;

    //用户年龄
    private Integer age;

    //用户邮箱
    private String email;

    //↓get set 无参、有参构造器
    //.....
}
public static void main(String[] args) {
        User one = new User(1L,"one",12,"[email protected]");
        User two = new User(2L,"two",17,"[email protected]");
        User three = new User(3L,"three",25,"[email protected]");
        User four = new User(4L,"four",43,"[email protected]");
        List<User> list = new ArrayList<>();
        list.add(one);
        list.add(two);
        list.add(three);
        list.add(four);
    }

业务实操

        1、取出集合对象的某一个属性,存至新的List集合中。

list.stream().map(User::getName).collect(Collectors.toList());

        2、取出对象中某两个属性,成为key-value形式的map集合。

                注意的是key值取数据源中唯一属性。

//id为key,name为value
list.stream().collect(Collectors.toMap(User::getId, User::getName));
//id为key,User对象为value  业务中比较常见。一般避免双重for循环时使用
list.stream().collect(Collectors.toMap(User::getId, User -> User));

        3、取出集合对象某一数值类型属性相加

list.stream().mapToInt(User::getAge).sum();

        4、取出集合对象中某一个属性去重后取出成新集合。

list.stream().map(User::getEmail).distinct().collect(Collectors.toList());

        5、取出集合对象中某一个属性进行字符串拼接

//     使用流      取属性         操作        工具类的拼接方法  拼接符
list.stream().map(User::getName).collect(Collectors.joining("-"));
//输出:one-two-three-four

        6、判断集合对象中的某一属性是否满足要求

//判断所有属性是否满足要求,全部满足返回true
list.stream().allMatch(k -> k.getAge() > 18);
//输出:flase

//判断所有属性中只要有满足要求的便会返回true
list.stream().anyMatch(k -> k.getAge() > 18);
//输出:true

        7、过滤结合对象中的某一属性值

//过滤结合对象中,年龄大于20的封装成新集合
//              流    Lamda          判断        组装成新集合
list.stream().filter(k -> k.getAge() > 20).collect(Collectors.toList());

总结:

        以上是我在工作中比较常用的几个方法。还有很多方法还需要补充学习。

猜你喜欢

转载自blog.csdn.net/m0_58907154/article/details/129692545