1- 函数式接口
java.util.function , Java 内置核心四大函数式接口,可以使用lambda表达式。
1.1 函数型接口(function)
基本概念: 只有一个方法的接口
1.1.1 源码分析

1.1.2 代码示例
package cn.guardwhy.juc02;
import java.util.function.Function;
/*
Function 函数型接口,只有一个参数输入,有一个参数输出
只要是函数型接口,都可以用lambda表达式简化
*/
public class Function01 {
public static void main(String[] args) {
/*Function<String, String> function = new Function<String, String>() {
@Override
public String apply(String str) {
return str;
}
};*/
Function<String, String> function = (str)->{
return str;
};
// 输出结果
System.out.println(function.apply("hello world!!!"));
}
}
1.2 断定型接口(Predicate)
有一个输入参数,返回只有布尔值。
1.2.1 源码分析
/**
* Represents a predicate (boolean-valued function) of one argument.
*
* <p>This is a <a href="package-summary.html">functional interface</a>
* whose functional method is {@link #test(Object)}.
*
* @param <T> the type of the input to the predicate
*
* @since 1.8
*/
@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);
1.2.2 代码示例
package cn.guardwhy.juc02;
import java.util.function.Predicate;
public class Predicate02 {
public static void main(String[] args) {
/*Predicate<String> predicate = new Predicate<String>() {
@Override
public boolean test(String str) {
return str.isEmpty();
}
};*/
Predicate<String> predicate = str->{
return str.isEmpty();
};
System.out.println(predicate.test(" ")); // false
}
}
1.3 消费型接口(Consumer)
有一个输入参数,没有返回值。
1.3.1 源码分析

1.3.2 代码示例
package cn.guardwhy.juc02;
import java.util.function.Consumer;
/*
Consumer消费型接口:只有输入,没有返回值
*/
public class ConsumerDemo03 {
public static void main(String[] args) {
/*Consumer<String> consumer = new Consumer<String>() {
@Override
public void accept(String str) {
System.out.println(str);
}
};*/
Consumer<String> consumer = str->{
System.out.println(str);
};
consumer.accept("hello world!!!");
}
}
1.4 供给型接口
没有输入参数,只有返回参数。
1.4.1 源码分析

1.4.2 代码分析
package cn.guardwhy.juc02;
import java.util.function.Supplier;
/*
Supplier 供给型接口,没有参数,只有返回值。
*/
public class SupplierDemo04 {
public static void main(String[] args) {
/*Supplier supplier = new Supplier<Integer>() {
@Override
public Integer get() {
System.out.println("get()方法");
return 666;
}
};*/
// 表达式
Supplier supplier = ()->{
return 666;
};
System.out.println(supplier.get());
}
}