原文网址:Java--函数式接口(java.util.function包)_IT利刃出鞘的博客-CSDN博客
简介
本文介绍Java的函数式接口(java.util.function包)。
常用接口
接口定义 | 方法 | 作用 | 说明 |
Function< T, R > | R apply(T t); | 参数:T对象。返回值:R对象。 | 功能型接口 |
Consumer< T > | void accept(T t); | 参数:T对象。返回值:无 | 消费型接口 |
Supplier< T > | T get(); | 参数:无。返回值:T对象 | 供给型接口 |
Predicate< T > | boolean test(T t); | 参数:T对象。返回值:boolean | 断言型接口 |
不常用接口
接口定义 | 描述 |
UnaryOperator< T > | 参数:T对象。返回值:T对象 |
BiConsumer<T, U> | 参数:T对象和U对象。返回值:无 |
BiPredicate<T, U> | 参数:T对象和U对象。返回值:boolean |
BiFunction<T, U, R> | 参数:T对象和U对象。返回值:R对象 |
BinaryOperator< T > | 参数:两个T对象。参会之:T对象 |
JDK1.8函数接口变化
JDK1.8新增加的函数接口:
- java.util.function
- java.util.stream
JDK1.8之前已有的函数式接口:
- java.lang.Runnable
- java.util.concurrent.Callable
- java.security.PrivilegedAction
- java.util.Comparator
- java.io.FileFilter
- java.nio.file.PathMatcher
- java.lang.reflect.InvocationHandler
- java.beans.PropertyChangeListener
- java.awt.event.ActionListener
- javax.swing.event.ChangeListener
Function< T, R > 功能型
简介
概述
作用
实现一个”一元函数“,即传入一个值经过函数的计算返回另一个值。
使用场景
- V HashMap.computeIfAbsent(K , Function<K, V>) // 简化代码,如果指定的键尚未与值关联或与null关联,使用函数返回值替换。
- <R> Stream<R> map(Function<? super T, ? extends R> mapper); // 转换流
设计思想
一元函数的思想,将转换逻辑提取出来,解耦合
定义
package java.util.function;
import java.util.Objects;
@FunctionalInterface
public interface Function<T, R> {
// 接受输入参数,对输入执行所需操作后 返回一个结果。
R apply(T t);
// 返回一个 先执行before函数对象apply方法,再执行当前函数对象apply方法的 函数对象。
default <V> Function<V, R> compose(Function<? super V, ? extends T> before) {
Objects.requireNonNull(before);
return (V v) -> apply(before.apply(v));
}
// 返回一个 先执行当前函数对象apply方法, 再执行after函数对象apply方法的 函数对象。
default <V> Function<T, V> andThen(Function<? super R, ? extends V> after) {
Objects.requireNonNull(after);
return (T t) -> after.apply(apply(t));
}
// 返回一个执行了apply()方法之后只会返回输入参数的函数对象。
static <T> Function<T, T> identity() {
return t -> t;
}
}
实例
apply示例1:直接返回
Function<String, String> function = a -> "Hello," + a;
System.out.println(function.apply("Jack")); // Hello,Jack
apply示例2:执行代码再返回
Function<String, String> function = a -> {
System.out.print("Welcome!");
return "Hello," + a;
}
System.out.println(function.apply("Jack")); // Welcome!Hello,Jack
compose
Function<String, String> function = a -> {a + " Jack!"};
Function<String, String> function1 = a -> {a + " Bob!"};
String greet = function.compose(function1).apply("Hello");
System.out.println(greet); // Hello Bob! Jack!
andThen
Function<String, String> function = a -> {a + " Jack!"};
Function<String, String> function1 = a -> {a + " Bob!"};
String greet = function.andThen(function1).apply("Hello");
System.out.println(greet); // Hello Jack! Bob!
所有接口
接口定义 | 描述 |
Function< T, R > | 接收T对象,返回R对象。 |
DoubleFunction<R> | 接收一个double类型的参数并返回结果的函数 |
DoubleToIntFunction | 接收一个double类型的参数并返回int结果的函数 |
DoubleToLongFunction | 接收一个double类型的参数并返回long结果的函数 |
IntFunction<R> | 接收一个int类型的参数并返回结果的函数 |
IntToDoubleFunction | 接收一个int类型的参数并返回double结果的函数 |
IntToLongFunction | 接收一个int类型的参数并返回long结果的函数 |
LongFunction<R> | 接收一个long类型的参数并返回结果的函数 |
LongToDoubleFunction | 接收一个long类型的参数并返回double结果的函数 |
LongToIntFunction | 接收一个long类型的参数并返回int结果的函数 |
ToDoubleBiFunction<T,U> | 接收两个参数并返回double结果的函数 |
ToDoubleFunction<T> | 接收一个参数并返回double结果的函数 |
ToIntBiFunction<T,U> | 接收两个参数并返回int结果的函数 |
ToIntFunction<T> | 接收一个参数并返回int结果的函数 |
ToLongBiFunction<T,U> | 接收两个参数并返回long结果的函数 |
ToLongFunction<T> | 接收一个参数并返回long结果的函数 |
Consumer< T > 消费型
上边是文章的部分内容,为统一维护,全文已转移到此网址:Java-函数式接口(java.util.function包) - 自学精灵