Functional interface is a new feature Java 8 introduced. Functional interfaces provides target types for lambda expressions and method references.
// Assignment context
Predicate<String> p = String::isEmpty;
// Method invocation context
stream.filter(e -> e.getSize() > 10)...
// Cast context
stream.map((ToIntFunction) e -> e.getSize())...
特性
- 函数式接口都是表达一种行为
- @FunctionalInterface保证了函数式接口只有一个抽象方法,但是注解的使用是不必须的
java.util.function
相关的新的函数式接口定义在 java.util.function 包下 1:
- Consumer,一个参数,无返回,void accept(T t)
- Function,一个参数,一个结果,R apply(T t)
- Supplier,无参数,返回一个结果,T get()
- Predicate 接收一个参数,返回一个 boolean,boolean test(T t)
- BinaryOperator,接收两个相同类型参数,返回一个相同类型
实例
class Test
{
	public static void main(String args[])
	{
		// create anonymous inner class object
		new Thread(new Runnable()
		{
			@Override
			public void run()
			{
				System.out.println("New thread created");
			}
		}).start();
	}
}
使用函数式接口后
class Test
{
public static void main(String args[])
{
	// lambda expression to create the object
	new Thread(()->
	{System.out.println("New thread created");}).start();
}
}
定义和使用
@FunctionalInterface
interface Square
{
	int calculate(int x);
}
class Test
{
	public static void main(String args[])
	{
		int a = 5;
		// lambda expression to define the calculate method
		Square s = (int x)->x*x;
		// parameter passed and return type must be
		// same as defined in the prototype
		int ans = s.calculate(a);
		System.out.println(ans);
	}
}