5.java8流的使用 stream的筛选与切片

1.关键代码

1.Employee2的bean类

/**
 * 创建日期:2021/10/29 14:01
 *
 * @author tony.sun
 * 类说明:
 */

public class Employee2 {
    private String name;
    private Integer age;
    private Double salary;
    private Status Status;

    public Employee2(String name, Integer age, Double salary, Employee2.Status status) {
        this.name = name;
        this.age = age;
        this.salary = salary;
        Status = status;
    }

    /**
     * 闲着,忙碌,休假
     */
    public enum Status{
        FREE,
        BUSY,
        VOCATION;
    }

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

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

    public Double getSalary() {
        return salary;
    }

    public void setSalary(Double salary) {
        this.salary = salary;
    }

    public Employee2.Status getStatus() {
        return Status;
    }

    public void setStatus(Employee2.Status status) {
        Status = status;
    }

    @Override
    public String toString() {
        return "Employee2{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", salary=" + salary +
                ", Status=" + Status +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Employee2 employee2 = (Employee2) o;
        return Objects.equals(name, employee2.name) &&
                Objects.equals(age, employee2.age) &&
                Objects.equals(salary, employee2.salary) &&
                Status == employee2.Status;
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age, salary, Status);
    }


}

2.Stream11Find类,流操作

import com.netease.streamlearningbyjava.bean.Employee2;

import org.junit.Test;

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

/**
 * 创建日期:2021/11/3 10:12
 *
 * @author tony.sun
 * 类说明:
 */

public class Stream11Find {
    List<Employee2> employee2s = Arrays.asList(
            new Employee2("张三", 18, 9999.99, Employee2.Status.FREE),
            new Employee2("李四", 58, 5555.55, Employee2.Status.BUSY),
            new Employee2("王五", 26, 3333.33, Employee2.Status.VOCATION),
            new Employee2("赵六", 36, 6666.66, Employee2.Status.FREE),
            new Employee2("田七", 12, 8888.88, Employee2.Status.BUSY)
    );

    /**这些属于终止操作
     * 查找与匹配
     * allMatch--检查是否匹配所有元素
     * anyMatch--检查是否至少匹配一个元素
     * noneMatch--检查是否没有匹配所有元素
     * findFirst--返回第一个元素
     * findAny--返回第一个元素
     * findAny--返回流中任意元素
     * count--返回流中元素的总个数
     * max--返回流中的最大值
     * min--返回流中的最小值
     */
    @Test
    public void test1(){
        //allMatch表示是否都匹配,这里是list里所有对象的Status都匹配BUSY
        boolean allMatch = employee2s.stream()
                .allMatch((e) -> e.getStatus().equals(Employee2.Status.BUSY));//固定格式:(e) ->,还有条件,这里是等于BUSY,
        System.out.println("allMatch:"+allMatch);
        //是否任意一个是匹配的BUSY
        boolean anyMatch = employee2s.stream()
                .anyMatch((e) -> e.getStatus().equals(Employee2.Status.BUSY));//条件
        System.out.println("anyMatch:"+anyMatch);
        //是否不存在一个匹配BUSY的
        boolean noneMatch = employee2s.stream()
                .noneMatch((e) -> e.getStatus().equals(Employee2.Status.BUSY));//条件
        System.out.println("noneMatch:"+noneMatch);
        //findFirst表示查找第一个,这里是获取最低工资的人,
        Optional<Employee2> findFirst = employee2s.stream()
                .sorted((e1, e2) -> Double.compare(e1.getSalary(), e2.getSalary()))//根据工资来从小到大排序
                .findFirst();
        System.out.println("findFirst:"+findFirst.get());//获取这个bean
        //获取最高工资,多了个-号
        Optional<Employee2> findFirst2 = employee2s.stream()
                .sorted((e1, e2) -> -Double.compare(e1.getSalary(), e2.getSalary()))//根据工资来从小到大排序,这里多了个“-”
                .findFirst();
        System.out.println("findFirst2:"+findFirst2.get());//获取这个bean
        //findAny任意找一个,这里是在闲着的员工中任意找一个
        Optional<Employee2> findAny = employee2s.stream()
                .filter((e) -> e.getStatus().equals(Employee2.Status.FREE))//这里是过滤,满足条件FREE的保留
                .findAny();//任意找一个
        System.out.println("findAny:"+findAny.get());
    }
    @Test
    public void test2(){
        //总个数
        long count = employee2s.stream()
                .count();
        System.out.println("count:"+count);
        //最大值
        Optional<Employee2> max = employee2s.stream()
                .max((e1, e2) -> Double.compare(e1.getSalary(), e2.getSalary()));//工资最高
        System.out.println("max:"+max.get());
        //最小值
        Optional<Employee2> min = employee2s.stream()
                .min((e1, e2) -> Double.compare(e1.getSalary(), e2.getSalary()));//工资最低
        System.out.println("min:"+min.get());


    }

}

2.步骤与讲解

1.创建list

List<Employee2> employee2s = Arrays.asList(
            new Employee2("张三", 18, 9999.99, Employee2.Status.FREE),
            new Employee2("李四", 58, 5555.55, Employee2.Status.BUSY),
            new Employee2("王五", 26, 3333.33, Employee2.Status.VOCATION),
            new Employee2("赵六", 36, 6666.66, Employee2.Status.FREE),
            new Employee2("田七", 12, 8888.88, Employee2.Status.BUSY)
    );

2.allMatch表示是否都匹配

//是否任意一个是匹配的BUSY
boolean allMatch = employee2s.stream()
                .allMatch((e) -> e.getStatus().equals(Employee2.Status.BUSY));//固定格式:(e) ->,还有条件,这里是等于BUSY,
        System.out.println("allMatch:"+allMatch);//false

.allMatch((e) -> e.getStatus().equals(Employee2.Status.BUSY))的意思是是否任意一个employee2s的Status都匹配BUSY

3.anyMatch表示任意一个是否匹配

//是否任意一个是匹配的BUSY
        boolean anyMatch = employee2s.stream()
                .anyMatch((e) -> e.getStatus().equals(Employee2.Status.BUSY));//条件
        System.out.println("anyMatch:"+anyMatch);

4.noneMatch表示是否不存在一个匹配

//是否不存在一个匹配BUSY的
        boolean noneMatch = employee2s.stream()
                .noneMatch((e) -> e.getStatus().equals(Employee2.Status.BUSY));//条件
        System.out.println("noneMatch:"+noneMatch);

5.findFirst表示查找第一个值

//findFirst表示查找第一个,这里是获取最低工资的人,
        Optional<Employee2> findFirst = employee2s.stream()
                .sorted((e1, e2) -> Double.compare(e1.getSalary(), e2.getSalary()))//根据工资来从小到大排序
                .findFirst();
        System.out.println("findFirst:"+findFirst.get());//获取这个bean
//获取最高工资,多了个-号
        Optional<Employee2> findFirst2 = employee2s.stream()
                .sorted((e1, e2) -> -Double.compare(e1.getSalary(), e2.getSalary()))//根据工资来从小到大排序,这里多了个“-”
                .findFirst();
                 System.out.println("findFirst2:"+findFirst2.get());//获取这个bean

6.findAny表示找任意一个

//findAny任意找一个,这里是在闲着的员工中任意找一个
        Optional<Employee2> findAny = employee2s.stream()
                .filter((e) -> e.getStatus().equals(Employee2.Status.FREE))//这里是过滤,满足条件FREE的保留
                .findAny();//任意找一个
        System.out.println("findAny:"+findAny.get());

3.反思总结

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值