前言
在java8中使用lambda表达式可以极大的简化我们的开发代码,使用Lambda表达式需要使用函数式接口,java8为我们定义好了4类内置函数式接口,这4类接口基本能够满足平时的开发需要,如果有比较特殊得情况我们可以自己去定义函数式接口。
1、consumer<T> 消费型接口,有入参,返回值为空
@FunctionalInterface
public interface Consumer<T> {
/**
* Performs this operation on the given argument.
*
* @param t the input argument
*/
void accept(T t);
}
例子:
package com.example.demo.java8;
import java.util.function.Consumer;
public class Java8InnerFunction {
public static void main(String[] args) {
Java8InnerFunction function=new Java8InnerFunction();
function.consumMoney(1000,x-> System.out.println("消费了:"+x+"元"));
}
public void consumMoney(int money, Consumer consumer){
consumer.accept(money);
}
}
2、Supplier<T> 提供型接口 空参但是有返回值
@FunctionalInterface
public interface Supplier<T> {
/**
* Gets a result.
*
* @return a result
*/
T get();
}
例子:
public static void main(String[] args) {
Java8InnerFunction function=new Java8InnerFunction();
int i = function.supplyRandomNum(() ->
(int) (Math.random() * 100);
);
System.out.println("获得的随机数是:"+i);
}
public int supplyRandomNum(Supplier<Integer> supplier){
return supplier.get();
}
3、Function<T, R> 函数型接口 有入参 有返回值
@FunctionalInterface
public interface Function<T, R> {
/**
* Applies this function to the given argument.
*
* @param t the function argument
* @return the function result
*/
R apply(T t);
}
例子:计算一个数的10倍,并输出结果
package com.example.demo.java8;
import java.util.Random;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;
public class Java8InnerFunction {
public static void main(String[] args) {
Java8InnerFunction function=new Java8InnerFunction();
int i1 = function.functionCompute(5, x -> x * 10);
System.out.println("计算后的结果值是:"+i1);
}
public int functionCompute(int a,Function<Integer,Integer> function){
return function.apply(a);
}
}
4、Predicat<T> 断言型接口 返回真假
@FunctionalInterface
public interface Predicate<T> {
/**
* Evaluates this predicate on the given argument.
*
* @param t the input argument
* @return {@code true} if the input argument matches the predicate,
* otherwise {@code false}
*/
boolean test(T t);
}
例子:计算一个数是否比100大,并输出真假
public static void main(String[] args) {
Java8InnerFunction function=new Java8InnerFunction();
boolean b = function.predicateCompare(101, x -> x > 100);
System.out.println("101比100大吗:"+b);
}
public boolean predicateCompare(int x,Predicate<Integer> predicate){
return predicate.filter(x);
}