Java8新特性-006-Stream初识

基本概念

  • 流由三部分组成
    • 数据源,可以是List,数组…
    • 零个或者多个中间操作,可以让前面一个流转换成另外一个流
    • 终止操作,得到最后的结果
  • 流操作的分类
    • 惰性求值
      • 只有终止操作执行时,中间操作才会执行
      //在执行count终止操作的时候,xxx(),yyy()中间操作才会执行
      stream.xxx().yyy().count();
      
      //对于没有终止操作而言,中间操作,即中间的方法是不会执行,即xxx() yyy()不会执行
      stream.xxx().yyy()
      
    • 及早求值,即指在调用方法的时候,立刻需要方法返回的结果,即上面的终止函数调用时,需要立刻知道返回的值。
    • 可以理解为stream存在多个或者零个惰性求值的中间操作,必须存在一个及早求值的终止操作,才会执行所有的操作,获取最后的结果
    • 示例
    public class StreamDemo {
    
        public static void main(String[] args) {
            List<Integer> integers = Arrays.asList(1, 2, 3);
    
            //惰性求值
            Stream<Integer> integerStream = integers.stream().filter(i ->
            {
                System.out.println(i);
                return i > 2;
            });
    
    
            System.out.println("-------------");
            //及时求值
            long count = integerStream.count();
        }
    }
    
    //返回
    -------------
    1
    2
    3
    

流初体验

流的创建

  • 介绍,字符串,数组,List的基本创建,一般使用Optional来进行使用,避免空指针
  • 代码
    public class StreamDemo {
    
        public static void main(String[] args) {
    
            //基本创建方法
            Stream stream = Stream.of(1,2,3);
    
            //数组创建方法
            String[] str = new String[]{"1","2","3"};
            Stream<String> str1 = Stream.of(str);
            Stream<String> stream2 = Arrays.stream(str);
    
    
            //List创建方法
            List<String> list = Arrays.asList("1", "2", "3");
            Stream<String> stream1 = list.stream();
    
    
        }
    }
    

IntStream

  • 案例:使用IntStream创建内部元素为Int的Stream,打印出[a,b)或者[a,b]的元素
    • 代码
    public class StreamDemo2 {
    
        public static void main(String[] args) {
    
            //[1,7)
            IntStream.range(1,7).forEach(System.out::println);
    
            System.out.println("--------");
    
            //[1,7]
            IntStream.rangeClosed(1,7).forEach(System.out::println);
        }
    }
    
  • 案例,整形的集合,每个元素变成两倍,然后求和
    • 代码
    public class StreamDemo3 {
    
        public static void main(String[] args) {
    
            //获取1到7所有整数
            IntStream intStream = IntStream.rangeClosed(1, 7);
    
            //map方法,理解为一个映射关系,参数是Function,代表传入一个参数返回一个参数
            //sum方法为前一个中间操作之后的流中每个元素进行求和
            System.out.println(intStream.map(i->i*2).sum());
    
            //使用reduce方法,reduce和sum一样都是终止操作
            System.out.println(intStream.map(i->i*2).reduce(0,Integer::sum));
        }
    }
    
©️2020 CSDN 皮肤主题: 像素格子 设计师:CSDN官方博客 返回首页