jdk1.8新特性:
Lambda表达式:
Stream:
Lambda表达式:
将函数当成参数传递给某个方法,或者把代码本身当作数据处理
书写方式:
(数据类型 变量名,数据类型 变量名...)->{
...
return ;(可以不写)
}
或者:
(变量名, 变量名,...)->{代码块}
或者:
变量->{代码块}
或者:
变量->代码
Lambda表达式可以引用类成员和局部变量,会将这些变量隐式转换成final的
函数式接口:
只包含一个方法的接口,且该方法是抽象方法
@FunctionalInterface
语法:
(参数列表)->表达式
或者
(参数列表)->{表达式;}
Consumer<T>:消费型接口 void accept(T t)
Supplier<T>:供应型接口 T get()
Function<T,R>:函数型接口 R apply(T t)
Predicate<T>:断言型接口 boolean test(T t)
接口的默认方法:default
方法引用:只写方法名,不加()
类名::静态方法名
实例名::实例方法名
类名::实例方法名
类名::new 构造器引用
Stream:
1)操作数据源(集合/数组所生成的元素序列)
2)仅仅代表着数据流,并没有数据结构
3)串行和并行实现
特点:
1)Stream自己不会存储元素
2)Stream流不会改变源对象
3)延迟执行
步骤:
1)创建Stream
a)通过Collection系列(Set/List)的集合提供的stream()方法[串行方法]或者parallelStream()方法[并行方法]
b)通过Arrays类中的静态方法stream()方法
c)通过Stream类中的静态方法of()方法
d)创建无限流,迭代方法iterate()或者generate()方法,可以用limit来进行限制
2)中间操作
filter:对Stream中的元素使用给定的过滤函数进行过滤操作
map:对Stream中的元素使用给定的转换函数进行转换操作
flatmap:平铺映射
sorted:
limit:
distinct:去重,需要重写equals()和hashCode()方法
skip(n):跳过元素个数
3)终止操作
count:计数,返回值是long
max:
min:
findAny:
findFirst:
forEach: