2-常用函数接口与方法引用

Posted mingmingn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2-常用函数接口与方法引用相关的知识,希望对你有一定的参考价值。

常用函数接口

接口 参数 返回类型 描述
Predicate<T> T boolean 用于判断一个对象.
Consumer<T> T void 用于接收一个对象进行处理但没有返回.
Function<T,R> T R 转换一个对象为不同类型的对象
Supplier<T> None T 提供一个对象
UnaryOperator<T> T T 接收对象并返回同类型对象
BinaryOperator<T> (T,T) T 接收两个同类型对象,并返回一个原类型对象

 

Predicate

public static void main(String[] args) {
    Predicate<String> p1 = str -> !str.isEmpty();
    Predicate<String> p2 = str -> str.endsWith("d");
    boolean test = p1.and(p2).test("end");
    System.out.println(test);
}           

Consumer

    private static void consumeString(Consumer<String> one, Consumer<String> two) {
        one.andThen(two).accept("Hello");
    }
    public static void main(String[] args) {
        consumeString(
                s -> System.out.println(s.toUpperCase()),
                s -> System.out.println(s.toLowerCase()));

}

Function

    public static void main(String[] args) {
        method(s->Integer.parseInt(s));
        method(Integer::parseInt);
    }
    private static void method(Function<String,Integer> function){
        int num=function.apply("10");
        System.out.println(num+20);
    }

Supplier

    private static String getString(Supplier<String> function) {
        return function.get();
    }
    public static void main(String[] args) {
        String msgA = "Hello";
        String msgB = "World";
        System.out.println(getString(() -> msgA + msgB));
    }

UnaryOperator

    public static void main(String[] args) {
        //创建一个 UnaryOperator对象,
        UnaryOperator operator = UnaryOperator.identity();
        //调用 apply()方法,输出参数的值
        System.out.println("输出与输出一样:" + operator.apply("abc"));
    }

BinaryOperator

    public static void main(String[] args) {
        BinaryOperator<Long> functionAdd = (Long x, Long y) -> x + y;
        Long res = functionAdd.apply(1L, 2L);
    }

方法引用

调用特定方法的Lambda表达式的一种快捷写法,可以让你重复使用现有的方法定义,并像Lambda表达式一样传递他们.

指向静态方法的方法引用

    /**
     * (args) -> ClassName.staticMethod(args);
     * ClassName::staticMethod;
     */
    @Test
    public void test1() {
        Consumer<String> c1 = (String number) -> Integer.parseInt(number);
        Consumer<String> c2 = Integer::parseInt;
    }

指向任意类型实例方法的方法引用

    /**
     * (args) -> args.instanceMethod();
     * ClassName::instanceMethod;
     */
    @Test
    public void test2() {
        Consumer<String> c1 = (String str) -> str.length();
        Consumer<String> c2 = String::length;
    }

指向现有对象的实例方法的方法引用

    /**
     * (args) -> object.instanceMethod(args);
     * object::instanceMethod;
     */
    @Test
    public void test3() {
        StringBuilder stringBuilder = new StringBuilder();
        Consumer<String> c1 = (String str) -> stringBuilder.append(str);
        Consumer<String> c2 = stringBuilder::append;
    }

 

以上是关于2-常用函数接口与方法引用的主要内容,如果未能解决你的问题,请参考以下文章

函数式接口之方法引用

函数式接口之方法引用

片段 getActivity() 与接口回调?

Java8新特性函数式编程API新时间日期处理APIOptional容器类总结

Java8新特性函数式编程API新时间日期处理APIOptional容器类总结

Java8新特性函数式编程API新时间日期处理APIOptional容器类总结