Java中Stream流计算

我们首先看一下JDK文档中对Stream的介绍
Java中Stream流计算_第1张图片

那么Stream到底是什么了?

Stream是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。
“集合讲的是数据,流讲的是计算!”

Stream 的特点

  • Stream 自己不会存储元素。
  • Stream 不会改变源对象,相反,他们会返回一个持有结果的新Stream。
  • Stream 操作是延迟执行的。这意味着他们会等到需要结果的时候才执行。

Stream数据流的基本操作

Java中Stream流计算_第2张图片

代码测试

在这之前你有必要先了解四大函数式接口,因为Stream的底层就是这些函数式接口。

User实体

package com.zhang.stream;

public class User {
    private int id;
    private String name;
    private int age;

    public User() {
    }

    public User(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

Stream流

package com.zhang.stream;


import java.util.Arrays;
import java.util.List;

/**
 * 题目要求:
 * 现在有5个用户进行筛选
 * 1、ID必须是偶数
 * 2、年龄必须大于23岁
 * 3、用户名转换成大写
 * 4、用户名倒序
 * 5、只能输出一个用户
 * */
public class Test {
    public static void main(String[] args) {
        User u1 = new User(1, "a", 20);
        User u2 = new User(2, "b", 25);
        User u3 = new User(3, "c", 27);
        User u4 = new User(4, "d", 21);
        User u5 = new User(5, "e", 22);

        //集合就是存储
        List<User> users = Arrays.asList(u1, u2, u3, u4, u5);


/** 1. 首先我们需要将 list 转化为stream流 
* 2. 然后将用户过滤出来,这里用到一个函数式接口Predicate,我们可 以使用lambda表达式简化 
* 3. 这里面传递的参数,就是Stream流的泛型类型,也就是User,所以,这里可以直接 返回用户id为偶数的用户信息;
*  * 4. 通过forEach进行遍历,直接简化输出 System.out::println ,等价于 System.out.println(u); **/


        //计算交给Stream
        // 链式编程
        users.stream()
                .filter(u->{return u.getId()%2==0;})
                .filter(u->{return u.getAge()>20;})
                .map(u->{return u.getName().toUpperCase();})
                .sorted((uu1,uu2)->{return uu2.compareTo(uu1);}) // //sorted() 自然排序,正排序 D->E
                .limit(1)
                .forEach(System.out::println);



    }
}

你可能感兴趣的:(Java多并发(JUC),Java,Stream,链式编程)