黑马程序员技术交流社区

标题: 【day13】-Stream流 [打印本页]

作者: tianhaolin    时间: 2018-12-2 10:45
标题: 【day13】-Stream流
第一章Stream流
常用的流操作
  1)获取流对象
        *集合->流: 集合对象.stream()
            例:list.stream()
                       .filter(name->endsWith(..))
                           .map(.....)
           *数组->流: Stream.of(数组)
        *可变参数->流:Stream of(T... values)
             例:Stream<String> stream = Stream.of("张三","李四","王五","赵六");
  2)Stream方法:
    延迟方法:返回值仍然是stream接口自身类型的方法
             *Stream filter(Predicate p): 过滤
              Lambda表示需要重写Predicate<T> 参数的test(T)方法
      *Stream map(Function f): 转换映射
              Lambda表示需要重写Function<T,R> 参数的apply(T)方法
      *Stream limit(long n): 只要前n个
              只是对流中的数据进行截取,获得一个新的流
      *Stream skip(long n): 不要前n个
              只是对流中的数据进行截取,获得一个新的流
    终结方法:返回值不再是stream接口自身类型的方法,不再支持流式编程
      *long count(): 返回流中元素的个数
      *void forEach(Consumer c): 遍历消费每个元素
    静态方法
            Stream concat(Stream s1, Stream s2):用于把两个流合并成一个新的流
  3)Stream流的特点
    Stream流属于管道流,只能被使用一次(每次调用方法后生成新的流),数据会转到下一个Stream中,流紧接着关闭
   
第二章、方法引用(简化Lambda表达式)
1.引用运算符-::
  1)::的应用实例
     -定义Printable函数式接口,定义方法 void print(String str);
         -在Test类中定义printString方法: private static void printString(Printable p){
                p.print("Hello World");
           }
         -在Test类主方法调用myPrint方法, printString(s->System.out.println(s));
         -使用方法引用简化lambda表达式:
           printString(System.out::println)  //代替 printString(s->System.out.println(s));
               
  2)引用运算符(::)的格式
      *如果Lambda要表达的函数方案已经存在与某个方法的实现中
           那么则可以通过::来引用该方法作为Lambda的替代
      *对象::方法
           对象和方法都必须是存在的
           System.out对象是已经存在的
           println方法也是已经存在的
           Lambda中传递的参数一定是方法引用中那个方法可以接受的类型
             **println()方法参数可以是String,所以没有问题
2.通过对象名引用成员方法
    *使用前提:对象名是存在的,成员方法也存在,所以必须new一个对象
    *-定义一个MethodReference类 创建public void printUpperCaseString方法
            public void printUpperCaseString(String str){
                System.out.println(str.toUpperCase());
                }
     -printString(new MethodReference()::printUpperCaseString)
3.通过类名引用静态成员方法
    *类存在,静态成员方法也已经存在,可以通过类名直接引用
        *-在MethodReferenc类中 创建一个static成员方法
            public static void calLength(String str){
        System.out.println(str.length());
        }
         -printString(MethodReference::calLength);
4.通过super引用成员方法 - super::方法
   *如果存在继承关系,当Lambda中需要super调用时,也可以使用方法引用代替
   *super关键字存在,一般用在类中的主方法中
5.通过this引用成员方法 - this::方法
6.类的构造器引用 - 类名称::new
7.数组的构造器引用 - 数据类型[]::new






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2