Java--函数式接口(java.util.function包)
其他网址JDK8函数式接口Function、Consumer、Predicate、Supplier_酒肉猿-CSDN博客Java8中Function函数式接口详解及使用_Life is for sharing的博客-CSDN博客JAVA8的java.util.function包讲解 (方便的函数式编程)_我是guyue,guyue就是我O(∩_∩)O-CSDN博客简介原理其他网址【Java8】Fu
原文网址: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包) - 自学精灵
更多推荐



所有评论(0)