packagecom.xu;importjava.util.ArrayList;importjava.util.List;importjava.util.Objects;importjava.util.Optional;/**
* @author Administrator
*/publicclassBuilder<T>{privatefinalSupplier1<T> supplier;privateList<Consumer1<T>> list =newArrayList<>();publicBuilder(Supplier1<T> supplier){this.supplier = supplier;}publicstatic<T>Builder<T>of(Supplier1<T> supplier){returnnewBuilder<T>(supplier);}public<V>Builder<T>width(Consumer2<T,V> consumer,V value){
list.add(e -> consumer.accept(e, value));returnthis;}public<V>Builder<T>width(Consumer2<T,V> consumer,V value,V orElse){if(null== value){
list.add(e -> consumer.accept(e, value));}else{
list.add(e -> consumer.accept(e, orElse));}returnthis;}public<V>Builder<T>width(boolean accept,Consumer2<T,V> consumer,V value){if(accept){
list.add(e -> consumer.accept(e, value));}returnthis;}public<V>Builder<T>width(boolean accept,Consumer2<T,V> consumer,V value,V orElse){if(accept){
list.add(e -> consumer.accept(e, value));}else{
list.add(e -> consumer.accept(e, orElse));}returnthis;}publicTbuild(){T t = supplier.get();Optional.ofNullable(list).orElse(newArrayList<>()).stream().filter(Objects::nonNull).forEach(e -> e.accept(t));return t;}@FunctionalInterfacepublicinterfaceConsumer2<T,V>{/**
* accept 2 values
*
* @param t
* @param value
*/voidaccept(T t,V value);}@FunctionalInterfacepublicinterfaceConsumer1<T>{/**
* accept 1 value
*
* @param t
*/voidaccept(T t);}@FunctionalInterfacepublicinterfaceSupplier1<T>{/**
* Gets a result.
*
* @return a result
*/Tget();}}
7 Java 常用函数式接口
函数式接口
定义
作用
Function<T, R>
方法
Fcuntion 接口是对接受一个 T 类型参数,返回R类型的结果的方法的抽象,通过调用apply方法执行内容。
Consumer<T>
消费者
该接口对应的方法类型为接收一个参数,没有返回值。
Supplier<T>
生产者
该接口不接受参数,但是提供一个返回值。
Predicate<T>
判断
该接口对应的方法为接收一个参数,返回一个Boolean类型值,多用于判断与过滤。
7.1 Predicate
主要使用方法
功能
boolean test(T t)
判断是否满足条件
Predicate<T> and(Predicate<? super T> other)
并且
Predicate<T> or(Predicate<? super T> other)
或者
Predicate<T> negate()
取反 test(T t)
Predicate<T> isEqual(Object targetRef)
-
Predicate not(Predicate<? super T> target)
-
@Testpublicvoidpredicate(){Predicate<Integer> predicate = age -> age >24;Student student =newStudent(23,"张三");System.out.println("张三大于24岁吗?"+ predicate.test(student.getAge()));}
Function<V, R> compose(Function<? super V, ? extends T> before)
比较
Function<T, V> andThen(Function<? super R, ? extends V> after)
Function<T, T> identity()
packagecom.xu.music;importjava.util.function.Function;publicclassTest{publicstaticvoidmain(String[] args){Function<Student,String> function =Student::getName;Student student =newStudent(175,23,"张三");String name = function.apply(student);System.out.println("-->"+ name);}}
-->张三
7.4 Supplier
抽象方法
功能
T get()
生产消息
packagecom.xu.music;importjava.util.function.Function;importjava.util.function.Supplier;publicclassTest{publicstaticvoidmain(String[] args){Student student =newStudent(175,23,"张三");Function<Student,Integer> function =Student::getAge;Supplier<Integer> supplier =()->Integer.valueOf(function.apply(student));System.out.println(supplier.get());}}
23
7.5 UnaryOperator
函数接口
抽象方法
功能
UnaryOperator
apply(T t)
一元操作
packagecom.xu.music;importjava.util.function.Predicate;importjava.util.function.UnaryOperator;publicclassTest{publicstaticvoidmain(String[] args){Student student =newStudent(175,23,"张三");Predicate<Integer> predicate = age -> age >24;UnaryOperator<Boolean> unaryOperator = uglily -> predicate.test(student.getAge());Boolean apply = unaryOperator.apply(true);System.out.println(apply);}}
Java Builder 构造者模式package com.xu.builder;import java.util.List;import java.util.ArrayList;public class Builder<T> { private final Supplier<T> supplier; private List<Consumer1<T>> list = new ArrayList<>();