Stream流

Stream流

java8中新增功能,可以以一种声明的方式处理数据

strea流是一个来自数据源的元素队列,并接支持聚合操作

  • 元素是特定类型的对象,形成一个队列.stream并不存储元素,而是按需计算
  • *数据源可以是集合.数组等
  • *聚合操作

Stream的操作三个步骤

1.创建Stream

一个数据源,获取一个流

2.中间操作

一个中间错做链,对数据源的数据进行处理

3.终止操作

一个终止操作,执行中间操作链,并产生结果

创建Stream
/**
* StreamAPI三个操作步骤: 
* 1、创建Stream 
* 2、中间操作 
* 3、终止操作
*/ 
public class TestStreamAPI1 {
    // 创建Stream 
    public void test1() { 
        // 1、可以通过Conllection系列集合提供的顺序流stream()或并行流 parallelStream() 
        List<String> list = new ArrayList<>(); 
        Stream<String> stream1 = list.stream(); 
        stream1 = list.parallelStream();
        
        // 2、通过Arrays中的静态方法stream()获取数据流 
        Integer ints[] = new Integer[10]; 
        Stream<Integer> stream2 = Arrays.stream(ints); 
        
        // 3、通过Stream类中的静态方法of() 
        Stream<String> stream3 = Stream.of("aa", "bb", "cc");
        String str[] = new String[10]; 
        Stream<String> stream4 = Stream.of(str) 
    } 
}
Stream的中间操作

筛选和切片

  • filter
    • 过滤器
  • limit
    • 阶段流,使其元素不超过给定数量
  • skip
    • 跳过元素
  • distinct
    • 筛选,进行去重
排序
  • sorted
    • 自然排序
  • sorted
    • 定制排序
终止
public void test1() {
    // allMatch-检查是否匹配所有元素 
    boolean b1 = emps.stream() 
        .allMatch((e) -> e.getStatus().equals(Status.BUSY));
     System.out.println(b1); 
   
    // anyMatch-检查是否至少匹配一个元素
    boolean b2 = emps.stream() 
        .anyMatch((e) -> e.getStatus().equals(Status.BUSY)); 
    System.out.println(b2); 
   
    // noneMatch-检查是否没有匹配所有元素 
    boolean b3 = emps.stream() 
        .noneMatch((e) -> e.getStatus().equals(Status.OTHER)); System.out.println(b3); 
   
    // findFirst-返回第一个元素 
    // 需求:按工资排序,获取第一个员工信息 
    Optional<Employee> op1 = emps.stream() 
        .sorted((e1, e2) -> Double.compare(e1.getSalary(), e2.getSalary())) 
        .findFirst(); 
    System.out.println(op1.get()); 
   
    // findAny-返回当前流中的任意元素 
    // 需求:找一个空闲状态的员工,添加到开发团队中 
    Optional<Employee> op2 = emps.parallelStream()// 并行流-多条线程进 行,谁先找到就是谁 
        .filter((e) -> e.getStatus().equals(Status.FERR)) 
        .findAny(); 
    System.out.println(op2.get()); 
    
    // count-返回流中元素的总个数 
    Long count = emps.stream()
        .count(); 
    System.out.println(count); 
    // max-返回流中最大值 
    // 需求:获取工资最高的员工信息 
    Optional<Employee> op3 = emps.stream() 
        .max((e1, e2) -> Double.compare(e1.getSalary(), e2.getSalary())); 
    System.out.println(op3.get()); 
   
    // min-返回流中最小值 
    // 需求:获取公司中工资最少员工的工资
    Optional<Double> op4 = emps.stream() 
        .map(Employee::getSalary) 
        .min(Double::compare); 
    System.out.println(op4.get()); 
}

注意

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值