Java8新特性强大的Stream API之Stream的中间操作筛选与切片(二)

本文通过代码实例详细解析了Java Stream API中的中间操作,包括filter、limit、skip和distinct的使用。这些操作允许我们在处理数据流时进行条件筛选、限制输出数量、跳过部分元素以及去除重复项。在实际编程中,Stream API的惰性求值特性确保了高效的数据处理。
摘要由CSDN通过智能技术生成

目录

Stream 的中间操作

代码演示

①创建测试类如下

②测试filter

③测试limit

④测试skip

⑤测试distinct

测试类完整代码


Stream 的中间操作

多个 中间操作 可以连接起来形成一个 流水线 ,除非流水 线上触发终止操作,否则 中间操作不会执行任何的处理 ! 而在 终止操作时一次性全部处理,称为“惰性求值”

代码演示

①创建测试类如下

package com.csdn.test;

import com.csdn.entity.Employee;
import org.junit.Test;

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

/**
 * @author summer
 * @date 2022-04-16  14:14
 */
public class TestMiddle1 {
    List<Employee> employees = Arrays.asList(
            new Employee("张三", 18, 6666.66),
            new Employee("李四", 38, 3333.66),
            new Employee("王五", 32, 4444.66),
            new Employee("赵六", 42, 5555.66),
            new Employee("田七", 21, 9999.66),
            new Employee("王八",19,8888.66),
            new Employee("王八",19,8888.66),
            new Employee("王八",19,8888.66),
            new Employee("张九", 52, 7777.66)
    );
}

②测试filter


    @Test
    public void test1(){
        //测试 filter
//        需求,输出年龄大于40岁的员工信息

        //获取一个流
        Stream<Employee> stream = employees.stream();
//执行中间操作返回一个新流
        Stream<Employee> employeeStream = stream.filter(e -> e.getAge() > 40);
//        执行终止操作输出
        employeeStream.forEach(System.out::println);
    }


结果
Employee{name='赵六', age=42, salary=5555.66}
Employee{name='张九', age=52, salary=7777.66}

③测试limit

    @Test
    public void test2(){
//        需求,输出工资大于7000的员工,只需要前4个
        employees.stream().filter(e->e.getSalary()>7000).limit(4).forEach(System.out::println);
    }

④测试skip

    @Test
    public void test3(){
//        需求,输出工资大于7000的员工,跳过前2个
        employees.stream().filter(e->e.getSalary()>7000).skip(2).forEach(System.out::println);
    }

⑤测试distinct

调用这个中间操作需要在Employee类中重写hashCode与equals方法,否则不会生效的哦

  @Test
    public void test4(){
//        需求,输出工资大于7000的员工,跳过前2个且去除重复数据
//        一定要记得在Employee类中重写hashCode与equals方法
        employees.stream().filter(e->e.getSalary()>7000).skip(2).distinct().forEach(System.out::println);
    }

测试类完整代码

package com.csdn.test;

import com.csdn.entity.Employee;
import org.junit.Test;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

/**
 * @author summer
 * @date 2022-04-16  14:14
 */
public class TestMiddle1 {
    List<Employee> employees = Arrays.asList(
            new Employee("张三",18,6666.66),
            new Employee("李四",38,3333.66),
            new Employee("王五",32,4444.66),
            new Employee("赵六",42,5555.66),
            new Employee("田七",21,9999.66),
            new Employee("王八",19,8888.66),
            new Employee("王八",19,8888.66),
            new Employee("王八",19,8888.66),
            new Employee("张九",52,7777.66)
    );
    @Test
    public void test4(){
//        需求,输出工资大于7000的员工,跳过前2个且去除重复数据
//        一定要记得在Employee类中重写hashCode与equals方法
        employees.stream().filter(e->e.getSalary()>7000).skip(2).distinct().forEach(System.out::println);
    }
    @Test
    public void test3(){
//        需求,输出工资大于7000的员工,跳过前2个
        employees.stream().filter(e->e.getSalary()>7000).skip(2).forEach(System.out::println);
    }

    @Test
    public void test2(){
//        需求,输出工资大于7000的员工,只需要前4个
        employees.stream().filter(e->e.getSalary()>7000).limit(4).forEach(System.out::println);
    }

    @Test
    public void test1(){
        //测试 filter
//        需求,输出年龄大于40岁的员工信息

        //获取一个流
        Stream<Employee> stream = employees.stream();
//执行中间操作返回一个新流
        Stream<Employee> employeeStream = stream.filter(e -> e.getAge() > 40);
//        执行终止操作输出
        employeeStream.forEach(System.out::println);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜欢编程的夏先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值