JAVA8学习6-流(1)

6 流

  1. Collection 提供了心的 stream() 方法
  2. 流不存储值,通过管道的方式获取值
  3. 本质是函数式的,对流的操作会生成一个结果,不过并不会修改底层的数据源,集合可以作为流的底层数据源
  4. 延迟查找,很多炉操作(过滤、映射、排序等)都可以延迟实现。

6.1 流由3部分构成:

  1. 零个或者多个中间操作(惰性求值)
  2. 终止操作(及早求值)

6.2 流操作的分类:

  1. 惰性求值
  2. 及早求值

steam.xx().yy().zz().count(); 其中xx().yy().zz()都是惰性操作,没有调用count方法之前,都不会做。count() 就是及早求值。

6.3 stream 流的创建常用方式

  1. 根据 Stream 静态方法 of 实现。
  2. 根据 数组 实现
  3. 根据 集合 实现
package cn.zxhysy.jdk8.steam;

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

public class SteamTest1 {

    public static void main(String[] args) {
        Stream stream1 = Stream.of("hello", "world", "hello world");

        String[] myArray = new String[]{"hello", "world", "hello world"};
        Stream stream2 = Stream.of(myArray);
        Stream stream3 = Arrays.stream(myArray);

        List<String> list = Arrays.asList(myArray);
        Stream stream4 = list.stream();
    }
}

6.4 流带来的简化操作

​ 在这里,我们来介绍下 IntStream 整数流。

package cn.zxhysy.jdk8.steam;

import java.util.stream.IntStream;

public class StreamTest2 {

    public static void main(String[] args) {
        IntStream.of(new int[]{1, 2, 3, 4}).forEach(System.out::println);
        // java8之前写法
//        for (int i : new int[]{1, 2, 3, 4}) {
//            System.out.println(i);
//        }

        // range(3,8) 不包含8
        IntStream.range(3, 8).forEach(System.out::println);
        // java8之前写法
//        for (int i = 3; i < 8; i++) {
//            System.out.println(i);
//        }

        // rangeClosed(3, 8) 包含8
        IntStream.rangeClosed(3,8).forEach(System.out::println);
    }

}

再来看一个:

package cn.zxhysy.jdk8.steam;

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

public class StreamTest3 {

    public static void main(String[] args) {

        List<Integer> list = Arrays.asList(1, 2, 3, 4);

        System.out.println(list.stream().map(i -> 2*i).reduce(0,Integer::sum));
        // java8 之前的写法
//        Integer acc = 0;
//        for (Integer i : list) {
//            Integer integer = 2 * i;
//            acc = acc + integer;
//        }
//        System.out.println(acc);
    }
}

可以看出,在对数据操作上,java8 方便了许多,这是一条必经之路,好好学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值