Java8—-函数式接口
- Consumer—-消费者(accept方法,Lambda与方法引用返回都是Consumer)
- Supplier—-供给型(get方法,返回数据,与Optional可以联用)
- Predicate—-谓词性(test方法,起到判断作用,)
- Function—-功能性(apply方法,转换数据)

1.Consumer消费者
package Java;import java.util.ArrayList;import java.util.List;import java.util.function.Consumer;import java.util.stream.Stream;/*** @ProjectName: Consumer_Test* @Package: Java* @Description: 消费者---Lambda和方法引用返回都是Consumer* @Author: huyuqiao* @CreateDate: 2020/9/18 18:10*//*① Consumer是一个接口,并且只要实现一个 accept 方法,就可以作为一个**“消费者”**输出信息。 ② 其实,lambda 表达式、方法引用的返回值都是 Consumer 类型,所以,他们能够作为 forEach 方法的参数,并且输出一个值。*/public class Consumer_Test {public static void main(String[] args){//匿名内部类Consumer<String> consumer = new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println(s);}};List list = new ArrayList();Stream<String> stream = Stream.of("aaa", "bbb", "ccc", "ddd");stream.forEach(consumer);System.out.println("********************");//Lambdastream = Stream.of("aaa", "bbb", "ddd", "ccc", "fff");Consumer<String> consumer1 = s -> System.out.println(s);stream.forEach(consumer1);System.out.println("********************");//方法引用stream = Stream.of("aaa", "bbb", "ddd", "ccc", "fff");Consumer consumer2 = System.out::println;stream.forEach(consumer);}}
2.Supplier供应者
package Java;import com.sun.org.apache.bcel.internal.generic.NEW;import javax.swing.text.html.Option;import java.util.Optional;import java.util.Random;import java.util.function.Supplier;import java.util.stream.Stream;/*** @ProjectName: Supplier_Test* @Package: Java* @Description: 供给型-配合optional* @Author: huyuqiao* @CreateDate: 2020/9/18 18:47*//*① Supplier 接口可以理解为一个容器,用于装数据的。 ② Supplier 接口有一个 get 方法,可以返回值。*/public class Supplier_Test {public static void test_Supplier2(){Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);Optional<Integer> first = stream.filter(integer -> integer > 6).findFirst();//orElse,如果first中存在数,就返回这个数,如果不存在,就放回传入的数System.out.println(first.orElse(777));System.out.println("********************");Supplier<Integer> supplier = new Supplier<Integer>() {@Overridepublic Integer get() {return new Random().nextInt();}};//orElseGet,如果first中存在数,就返回这个数,如果不存在,就返回supplier返回的值System.out.println(first.orElseGet(supplier));}public static void test_Supplier(){Supplier<Integer> supplier = new Supplier<Integer>() {@Overridepublic Integer get() {return new Random().nextInt();}};System.out.println(supplier.get());System.out.println("********************");supplier = () -> new Random().nextInt();System.out.println(supplier.get());System.out.println("********************");Supplier<Double> supplier1 = Math::random;System.out.println(supplier1.get());}public static void main(String[] args){test_Supplier2();}}
3.Predicate谓词性
package Java;import java.util.function.Predicate;/*** @ProjectName: Predicate_Test* @Package: Java* @Description: 谓词型-判断* @Author: huyuqiao* @CreateDate: 2020/9/18 19:02*//*① Predicate 是一个谓词型接口,其实只是起到一个判断作用。 ② Predicate 通过实现一个 test 方法做判断。*/public class Predicate_Test {public static void main(String[] args){Predicate<Integer> predicate = new Predicate<Integer>() {@Overridepublic boolean test(Integer integer) {if (integer > 5){return true;} else {return false;}}};System.out.println(predicate.test(6));System.out.println("********************");predicate = integer -> integer > 5;System.out.println(predicate.test(5));}}
4.Function功能性
package Java;import java.util.function.Function;import java.util.stream.Stream;/*** @ProjectName: Function_Test* @Package: Java* @Description:* @Author: huyuqiao* @CreateDate: 2020/9/18 19:12*//*① Function 接口是一个功能型接口,是一个转换数据(求长度,大小等)的作用。 ② Function 接口实现 apply 方法来做转换。*/public class Function_Test {public static void main(String[] args){Function<String, Integer> function = new Function<String, Integer>() {@Overridepublic Integer apply(String s) {return s.length();}};Stream<String> stream = Stream.of("aaa", "bbbbb", "ccccccv");Stream<Integer> stream1 = stream.map(function);stream1.forEach(System.out::println);}}
