1. lambda表达式

  1. // 不需要参数,返回值为5
  2. () -> 5
  3. // 接收一个参数(数字类型),返回其二倍的值
  4. x -> 2*x
  5. // 接收两个参数(数字类型),返回两个参数的和
  6. (x,y) -> x+y
  7. // 接收两个int类型的x与y,返回两个的和
  8. (int x,int y) -> x+y
  9. // 直接在控制台打印。无返回值
  10. (String s) -> System.out.println(s)
  11. 逗号隔开的参数列表 (x,x,x) ()
  12. 箭头符号 ->
  13. 方法体 (λ代码块)

2. 函数式接口

JDK自带 (很多存在于java.util.function包中) 四大核心函数式接口:

2.1 有参,无返回值(消费性)

  1. Consumer<?> 消费者 如何理解?:给了方法一个参数 消费掉了 没了
  2. @FunctionalInterface
  3. public interface Consumer<T> {
  4. void accept(T t);
  5. }

2.2 无参,有返回值(供给性)

  1. Supplier<T> 如何理解? 供给 只出不进
  2. @FunctionalInterface
  3. public interface Supplier<T> {
  4. T get();
  5. }

2.3 有参,有返回值(函数性)

  1. Funcation<T,R> 如何理解?:有参 有返回值 很符合函数规则
  2. @FunctionalInterface
  3. public interface Function<T, R> {
  4. R apply(T t);
  5. ...
  6. }

2.4 断言式接口

  1. Predicate<T> 如何理解?: 有参 返回boolean 我断言今天会下雨? 真还是假
  2. @FunctionalInterface
  3. public interface Predicate<T> {
  4. boolean test(T t);
  5. ...
  6. }

3. 方法引用和数组引用

Java 8还允许使用::来引用一个已经存在的方法,其语法如下:

instanceName::methodName 对象::方法名
ClassName::staticMethodName 类名::静态方法
ClassName::methodName 类名::普通方法
ClassName::new 类名::new 调用的构造器
TypeName[]::new String[]::new 调用数组的构造器

4. StreamAPI

  1. count 统计个数 long 终结 forEach 逐一处理 void 终结 filter 过滤 Stream 函数拼接 limit 取用前几个 Stream 函数拼接 skip 跳过前几个 Stream 函数拼接 map 映射 Stream 函数拼接 concat 组合 Stream 函数拼接
方法名 方法作用 返回值类型 方法种类
count
foreach
filter
limit
skip
map

5. LocalDateTime

6. Optional

7.Base64