jdk8特性
一、lambda表达式
java
Thread thread = new Thread(() -> System.out.println("aaa"));二、jdk8新接口
| 函数式接口 | 函数描述符 | 原始类型特化 |
|---|---|---|
| Predicate<T> | T->boolean | IntPredicate, LongPredicate, DoublePredicate |
| Consumer<T> | T->void | IntConsumer, LongConsumer, DoubleConsumer |
| Function<T,R> | T->R | IntFunction<R>, IntToDoubleFunction, IntToLongFunction, LongFunction<R>, LongToDoubleFunction, LongToIntFunction, DoubleFunction<R>, ToIntFunction<T>, ToDoubleFunction<T>, ToLongFunction<T> |
| Supplier<T> | ()->T | BooleanSupplier, IntSupplier, LongSupplier, DoubleSupplier |
| UnaryOperator<T> | T->T | IntUnaryOperator, LongUnaryOperator, DoubleUnaryOperator |
| BinaryOperator<T> | (T,T)->T | IntBinaryOperator, LongBinaryOperator, DoubleBinaryOperator |
BiPredicate\<L,R\> | (L,R)->boolean | |
| BiConsumer<T,U> | (T,U)->void | ObjIntConsumer<T>, ObjLongConsumer<T>, ObjDoubleConsumer<T> |
| BiFunction<T,U,R> | (T,U)->R | ToIntBiFunction<T,U>, ToLongBiFunction<T,U>, ToDoubleBiFunction<T,U> |
2.1 使用案例
| 使用案例 | Lambda的例子 | 对应的函数式接口 |
|---|---|---|
| 布尔表达式 | (List<String> list) -> list.isEmpty() | Predicate<List<String>> |
| 创建对象 | () -> new Apple(10) | Supplier<Apple> |
| 消费一个对象 | (Apple a) -> System.out.println(a.getWeight()) | Consumer<Apple> |
| 从一个对象中选择/提取 | (String s) -> s.length() | Function<String, Integer> 或 ToIntFunction<String> |
| 合并两个值 | (int a, int b) -> a * b | IntBinaryOperator |
| 比较两个对象 | (Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight()) | Comparator<Apple> 或 BiFunction<Apple, Apple, Integer> 或 ToIntBiFunction<Apple, Apple> |
三、方法引用
| Lambda | 等效的方法引用 |
|---|---|
| (Apple a) -> a.getWeight() | Apple::getWeight |
| () -> Thread.currentThread().dumpStack() | Thread.currentThread()::dumpStack |
| (str, i) -> str.substring(i) | String::substring |
| (String s) -> System.out.println(s) | System.out::println |
四、流的中间操作
| 操作 | 类型 | 返回类型 | 操作参数 | 函数描述符 |
|---|---|---|---|---|
| filter | 中间 | Stream<T> | Predicate<T> | T -> boolean |
| map | 中间 | Stream<R> | Function<T, R> | T -> R |
| limit | 中间 | Stream<T> | long | |
| skip | 中间 | Stream<T> | long | |
| sorted | 中间 | Stream<T> | Comparator<T> | (T, T) -> int |
| distinct | 中间 | Stream<T> |
四、流的终端操作
| 操作 | 类型 | 目的 |
|---|---|---|
| forEach | 终端 | 消费流中的每个元素并对其应用Lambda。这一操作返回void |
| count | 终端 | 返回流中元素的个数。这一操作返回long |
| collect | 终端 | 把流归约成一个集合,比如List、Map 甚至是Integer。 |
五、中间操作和终端操作
| 操作 | 类型 | 返回类型 | 使用的类型/函数式接口 | 函数描述符 |
|---|---|---|---|---|
| filter | 中间 | Stream<T> | Predicate<T> | T -> boolean |
| distinct | 中间 | Stream<T> | ||
| skip | 中间 | Stream<T> | long | |
| limit | 中间 | Stream<T> | long | |
| map | 中间 | Stream<R> | Function<T, R> | T -> R |
| flatMap | 中间 | Stream<R> | Function<T, Stream<R>> | T -> Stream<R> |
| sorted | 中间 | Stream<T> | Comparator<T> | (T, T) -> int |
| anyMatch | 终端 | boolean | Predicate<T> | T -> boolean |
| noneMatch | 终端 | boolean | Predicate<T> | T -> boolean |
| allMatch | 终端 | boolean | Predicate<T> | T -> boolean |
| findAny | 终端 | Optional<T> | ||
| findFirst | 终端 | Optional<T> | ||
| forEach | 终端 | void | Consumer<T> | T -> void |
| collect | 终端 | R | Collector<T, A, R> | |
| reduce | 终端 | Optional |
