Stream API(一)

什么是Stream(流)

是将我们的数据源(集合、数组等)进行一系列的中间操作,但不会改变我们的数据

注意:

1、Stream自己不会存储数据

2、不会改变源对象

3、Stream是延时的。会等到需要结果的时候才执行

Stream的操作三个步骤

1、得到一个stream

一个数据源获得一个流

2、中间操作

一个中间操作链,对数据源的数据进行处理

3、终止操作

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

得到一个stream

1、通过conllection系列集合提过的stream()方法 或 parallelStream()

2、通过Array中的静态方法stream()获得数组流

3、通过Stream中的of方法

4、无限流 迭代、生成

    @Test
    public void test(){
        //创建stream
        //1
        ArrayList<String> list = new ArrayList<>();
        Stream<String> stream = list.stream();
        //2
        Student[] students = new Student[10];
        Stream<Student> stream1 = Arrays.stream(students);
        //3
        Stream<String> aa = Stream.of("aa", "bb");
        //4 迭代
        Stream<Integer> iterate = Stream.iterate(0, (x) -> x + 2);
        iterate.forEach(System.out::println);
        //5 生成
        Stream.generate(Math::random).forEach(System.out::println);
    }

Stream中间操作

内部迭代,惰性求值

筛选与切片

filter:从流中排除元素

    @Test
    public void test(){
        ArrayList<Student> students = new ArrayList<>();
        students.add(new Student("张三1", 40, 1));
        students.add(new Student("张三2", 20, 2));
        students.add(new Student("张三3", 30, 3));
        students.add(new Student("张三4", 40, 4));
        //
     students.stream().filter((student)->student.getAge()>30).forEach(System.out::println);
    }

limit:截取操作

skip(n):返回一个扔掉前n个元素的流,若流中元素不足n个,则返回一个空值,

distinct:去重,通过hashcode和equals方法判断

映射

map:将元素转化为其他形式或用于提取信息。接收一个函数最为参数,该函数会被应用到每一个元素上,并将其映射成一个新的元素。

flatMap:将对个流合并为一个流

    public void test(){
        ArrayList<Student> students = new ArrayList<>();
        students.add(new Student("张三1", 40, 1));
        students.add(new Student("张三2", 20, 2));
        students.add(new Student("张三3", 30, 3));
        students.add(new Student("张三4", 40, 4));

        students.stream().map((Student::getName)).forEach(System.out::println);
        
    }

排序

        sorted() :自然排序 comparable

        sorted(comparator):定制

    @Test
    public void test(){
        ArrayList<Student> students = new ArrayList<>();
        students.add(new Student("张三1", 40, 1));
        students.add(new Student("张三2", 20, 2));
        students.add(new Student("张三3", 30, 3));
        students.add(new Student("张三4", 40, 4));

        students.stream().sorted((e1,e2)->{
           if (e1.getAge()==e2.getAge()){
               return Integer.compare(e1.getSno(),e2.getSno());
           }else {
               return Integer.compare(e1.getAge(),e2.getAge());
           }

        }).forEach(System.out::println);

    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值