Stream流和Lambad表达式

  • Post author:
  • Post category:其他

Stream流和Lambad表达式

Stream流

Stream流有一些特性:

1 .Stream流不是一种数据结构,不保存数据,它只是在原数据集上定义了一组操作。
2.这些操作是惰性的,即每当访问到流中的一个元素,才会在此元素上执行这一系列操作。
3.Stream不保存数据,故每个Stream流只能使用一次。

Stream 的操作分为三种:

1.创建stream流。
2.中间操作。
3.终止操作。

创建stream

1)Collection接口的stream()或parallelStream()方法
2)Arrays.stream(array)
3)静态的Stream.iterate()方法生成无限流,接受一个种子值以及一个迭代函数
4)静态的Stream.generate()方法生成无限流,接受一个不包含引元的函数

中间操作

1)filter——接收 Lambda , 从流中排除某些元素。
2)limit——截断流,使其元素不超过给定数量。
3)skip(n) —— 跳过元素,返回一个扔掉了前 n 个元素的流。若流中元素不足 n 个,则返回一个空流。与 limit(n) 互补
4)distinct——筛选,通过流所生成元素的 hashCode() 和 equals() 去除重复元素
5)sorted()——自然排序
6)sorted(Comparator com)——定制排序

映射:

1)map——接收 Lambda , 将元素转换成其他形式或提取信息。接收一个函数作为参数,该函数会被应用到每个元素上,并将其映射成一个新的元素。
2)flatMap——接收一个函数作为参数,将流中的每个值都换成另一个流,然后把所有流连接成一个流
终止操作
1) allMatch——检查是否匹配所有元素
2) anyMatch——检查是否至少匹配一个元素
3)noneMatch——检查是否没有匹配的元素 没有匹配返回true
4)findFirst——返回第一个元素
5)findAny——返回当前流中的任意元素
6)count——返回流中元素的总个数
7)max——返回流中最大值
8)min——返回流中最小值
9) reduce(T identity, BinaryOperator) / reduce(BinaryOperator)–规约可以将流中元素反复结合起来,得到一个值。
10)collect–收集 将流转换为其他形式。接收一个 Collector接口的实现,用于给Stream中元素做汇总的方法
归约:
1)

Lambda表达式

Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式支持将代码块作为方法参数,Lambda表达式允许使用更简洁的代码来创建只有一个抽象方法的接口(函数式接口)的实例。
Lambda表达式的主要作用就是代替匿名内部类的烦琐语法。
由三部分组成:
形参列表。
箭头(->)。
代码块。
基本语法:
(parameters) -> expression

(parameters) ->{ statements; }
详细解释:
语法格式一:无参数,无返回值
() -> System.out.println(“Hello Lambda!”);
语法格式二:有一个参数,并且无返回值
(x) -> System.out.println(x)
语法格式三:若只有一个参数,小括号可以省略不写
x -> System.out.println(x)
语法格式四:有两个以上的参数,有返回值,并且 Lambda 体中有多条语句
Comparator com = (x, y) -> {
​ System.out.println(“函数式接口”);
​ return Integer.compare(x, y);
};
语法格式五:若 Lambda 体中只有一条语句, return 和 大括号都可以省略不写
Comparator com = (x, y) -> Integer.compare(x, y);
语法格式六:Lambda 表达式的参数列表的数据类型可以省略不写,因为JVM编译器通过上下文推断出,数据类型,即“类型推断”
(Integer x, Integer y) -> Integer.compare(x, y);


版权声明:本文为WDNMZBG原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。