Lambda表达式
基本语法:(parameters) -> { expression or statements }
示例:
// 无参数
new Thread(() -> System.out.println(Thread.currentThread().getName())).start();
// 一个参数
Arrays.asList(1, 2, 3).forEach(x -> System.out.println(x));
// 多个参数
String[] arr = {"b", "d", "z"};
Arrays.sort(arr, (o1, o2) -> o1.compareToIgnoreCase(o2));
System.out.println(Arrays.toString(arr));
函数式接口
函数式接口也是接口,但只能有一个抽象方法,使用@FunctionalInterface
注解标注
@FunctionalInterface
public interface Consumer<T> {
void accept(T t);
}
@FunctionalInterface
public interface Runnable {
// public abstract在接口中可省略
public abstract void run();
}
预定义函数式接口
java.util.function
包预定义了一组完整的目标接口,基本命名准则为:
- 如果只处理对象而非基本类型,名称则为
Function,Consumer,Predicate
等。 - 如果接收的参数是基本类型,则由名称的第一部分表示,如
LongConsumer,DoubleFunction,IntPredicate
等,但返回基本类型的 Supplier 接口例外。 - 如果返回值为基本类型,则用 To 表示,如
ToLongFunction <T> 和 IntToLongFunction
。 - 如果返回值类型与参数类型相同,则是一个 Operator :单个参数使用 UnaryOperator,两个参数使用 BinaryOperator。
- 如果接收参数并返回一个布尔值,则是一个 谓词 (Predicate)。
- 如果接收的两个参数类型不同,则名称中有一个 Bi。
函数接口 | 方法定义 | 特征 |
---|---|---|
Predicate |
boolean test(T t) | 测试输入是否满足条件 |
Function<T, R> | R apply(T t) | 输入类型T,输出类型R |
Consumer |
void accept(T t) | 消费者,无返回值 |
Supplier |
T get() | 无参,返回任意类型 |
方法引用
类名或对象名::方法名,类名::new
标签:Predicate,函数,编程,接口,参数,类型,public From: https://www.cnblogs.com/dylmys/p/17222514.html