1. lambda表达式
// 不需要参数,返回值为5
() -> 5
// 接收一个参数(数字类型),返回其二倍的值
x -> 2*x
// 接收两个参数(数字类型),返回两个参数的和
(x,y) -> x+y
// 接收两个int类型的x与y,返回两个的和
(int x,int y) -> x+y
// 直接在控制台打印。无返回值
(String s) -> System.out.println(s)
逗号隔开的参数列表 (x,x,x) ()
箭头符号 ->
方法体 (λ代码块)
2. 函数式接口
JDK自带 (很多存在于java.util.function包中) 四大核心函数式接口:
2.1 有参,无返回值(消费性)
Consumer<?> 消费者 如何理解?:给了方法一个参数 消费掉了 没了
@FunctionalInterface
public interface Consumer<T> {
void accept(T t);
}
2.2 无参,有返回值(供给性)
Supplier<T> 如何理解? 供给 只出不进
@FunctionalInterface
public interface Supplier<T> {
T get();
}
2.3 有参,有返回值(函数性)
Funcation<T,R> 如何理解?:有参 有返回值 很符合函数规则
@FunctionalInterface
public interface Function<T, R> {
R apply(T t);
...
}
2.4 断言式接口
Predicate<T> 如何理解?: 有参 返回boolean 我断言今天会下雨? 真还是假
@FunctionalInterface
public interface Predicate<T> {
boolean test(T t);
...
}
3. 方法引用和数组引用
Java 8还允许使用::来引用一个已经存在的方法,其语法如下:
instanceName::methodName | 对象::方法名 |
---|---|
ClassName::staticMethodName | 类名::静态方法 |
ClassName::methodName | 类名::普通方法 |
ClassName::new | 类名::new 调用的构造器 |
TypeName[]::new | String[]::new 调用数组的构造器 |
4. StreamAPI
count 统计个数 long 终结 forEach 逐一处理 void 终结 filter 过滤 Stream 函数拼接 limit 取用前几个 Stream 函数拼接 skip 跳过前几个 Stream 函数拼接 map 映射 Stream 函数拼接 concat 组合 Stream 函数拼接
方法名 | 方法作用 | 返回值类型 | 方法种类 |
---|---|---|---|
count | |||
foreach | |||
filter | |||
limit | |||
skip | |||
map |