[记录] Java8新特性之Stream流

/**
 * @author zbinyds
 * @time 2022/10/18 16:39
 *
 * Stream Api可以高效的操作集合数据。
 */
public class Stream_ {

    /**
     * 常用Stream Api使用。
     * stream():顺序流
     * parallelStream():并行流
     */
    @Test
    public void ApiTest(){
        // 获取测试数据
        List<Employee> employees = getListData();

        // filter(过滤条件)。通过过滤条件筛选数据
//        employees.stream().filter(employee -> employee.getAge() > 20).forEach(System.out::println);

        // limit(n)。截取前n条数据
//        employees.stream().limit(4).forEach(System.out::println);

        // skip(n)。跳过前n条数据,截取之后的数据。
//        employees.stream().skip(4).forEach(System.out::println);

        // distinct()。去除重复数据,根据equals()和hashCode()进行去重
//        employees.stream().distinct().forEach(System.out::println);

        // map()映射,比如获取集合中对象的name属性值
//        employees.stream().map(Employee::getName).forEach(System.out::println);

        // sorted()自然排序/sorted(Comparator comparator)定制排序。比如按照集合中对象的age进行排序
//        employees.stream().sorted((e1,e2) -> Integer.compare(e1.getAge(),e2.getAge())).forEach(System.out::println);

        // allMatch(查找条件)。查找是否匹配所有元素,返回boolean。
//        boolean b = employees.stream().allMatch(employee -> employee.getAge() > 20);
//        System.out.println(b);

        // anyMatch(查找条件)。查找是否至少匹配单个元素,返回boolean。
//        boolean b = employees.stream().anyMatch(employee -> employee.getAge() == 24);
//        System.out.println(b);

        // noneMatch(查找条件)。查找是否没有匹配条件的元素,返回boolean。
//        boolean b = employees.stream().noneMatch(employee -> employee.getName().contains("abc"));
//        System.out.println(b);

        // findFirst()。查找流中第一个元素
//        Optional<Employee> firstEmployee = employees.stream().findFirst();
//        System.out.println(firstEmployee);

        // findAny()。查找流中中任意一个元素
//        Optional<Employee> lastEmployee = employees.parallelStream().findAny();
//        System.out.println(lastEmployee);

        // count()。返回流中的元素个数
//        long count = employees.stream().count();
//        System.out.println(count);

        // min(查找条件)/max(查找条件)。按照自定义条件来获取流中最小值/最大值...等等
//        Optional<Double> maxSalary = employees.stream().map(Employee::getSalary).max(Double::compare);
//        Optional<Double> minSalary = employees.stream().map(Employee::getSalary).min(Double::compare);
//        System.out.println("集合中工资最高为 = " + maxSalary.get() + " ,最低为 = " + minSalary.get());

        // forEach()。遍历流中所有元素
//        employees.stream().forEach(System.out::println);

        // reduce(计算规则)。归约,计算流中的元素值
//        Double sumSalary = employees.stream().map(Employee::getSalary).reduce(0.0, Double::sum); // 方式一
//        Optional<Double> sumSalary = employees.stream().map(Employee::getSalary).reduce((d1, d2) -> d1 + d2); // 方式二
//        System.out.println(sumSalary);

        // collect(类型)。将处理好的流,转换为list/set/collection类型
        Set<Employee> set = employees.stream().filter(e -> e.getName().contains("a")).collect(Collectors.toSet());
        System.out.println(set);
    }

    static List<Employee> getListData(){
        ArrayList<Employee> employees = new ArrayList<>();
        employees.add(new Employee(1001,"Tom",24,6000.00));
        employees.add(new Employee(1002,"Jack",55,17800.00));
        employees.add(new Employee(1003,"Jerry",67,25000.00));
        employees.add(new Employee(1004,"Marry",54,12000.00));
        employees.add(new Employee(1005,"Lucy",33,6000.00));
        employees.add(new Employee(1006,"Mary",37,6834.00));
        employees.add(new Employee(1007,"Tory",17,3577.00));
        employees.add(new Employee(1008,"Miss",49,7447.00));
        employees.add(new Employee(1009,"GG",50,5200.00));
        employees.add(new Employee(1009,"GG",50,5200.00));
        employees.add(new Employee(1009,"GG",50,5200.00));

        return employees;
    }
}

// 测试员工类 Employee
class Employee{
    private Integer id;
    private String name;
    private Integer age;
    private Double salary;

    public Employee() {
    }

    public Employee(Integer id, String name, Integer age, Double salary) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.salary = salary;
    }

    public Integer getId() {
        return id;
    }

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

    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;
    }

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

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值