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,"xxxx@163.com");
        User two = new User(2L,"two",17,"xxxx@qq.com");
        User three = new User(3L,"three",25,"xxxx@qq.com");
        User four = new User(4L,"four",43,"xxxx@alibaba.com");
        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());

总结:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值