java之Function、Consumer和Predicate用法及区别

首先参数是函数式接口类型的入参时,这个入参类型可以是lamda表达式代替。

1.Function:传入一个类型值返回一个类型值

源码:

@FunctionalInterface
public interface Function {

    /**
     * Applies this function to the given argument.
     *
     * @param t the function argument
     * @return the function result
     */
    R apply(T t);

.......


}

示例一:

        Function function=new Function() {
            @Override
            public Object apply(Object o) {
                return o;
            }
        };
        String str1=function.apply("aaa");

        System.out.println(str1);

示例二:

    public static String validateValue(String name,Function function){
        return function.apply(name);
    }


    public static void main(String[] args){

        String name="";
        System.out.println(validateValue(name,inputStr -> inputStr.isEmpty()?"不能为空":inputStr));

}

inputStr相当于 apply方法的入参,inputStr.isEmpty()?"不能为空":inputStr相当于apply方法的实现(Lamda表达式)。以下同理。

2.Consumer: 传入一个类型值,没有返回值

源码:
 

@FunctionalInterface
public interface Consumer {

    /**
     * Performs this operation on the given argument.
     *
     * @param t the input argument
     */
    void accept(T t);
...

}

示例:

    public static void main(String[] args){

        String name="aaa";
        Consumer consumer=new Consumer() {
            @Override
            public void accept(Object o) {
                System.out.println(o+"===");
            }
        };
        consumer.accept(name);

}

3.Predicate:一般用于做判断,返回boolean类型

源码:

@FunctionalInterface
public interface Predicate {

    /**
     * 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);

...

}

示例一:

        String name="bbb";

        Predicate predicate=new Predicate() {
            @Override
            public boolean test(Object o) {
                return o.equals("aaa");
            }
        };
        System.out.println(predicate.test(name));

示例二:

    public static boolean validateValue(String name,Predicate predicate){
        return predicate.test(name);
    }


    public static void main(String[] args){

        String name="aaa";
        System.out.println(validateValue(name,inputStr -> inputStr.equals("aaa")? true:false));

}

 

 

你可能感兴趣的:(java基础)