Java 8 函数式接口

原创
10/14 16:00
阅读数 1

对函数接口的个人理解,在java8之前已经有了函数式编程,之前叫做匿名内部类,Java8叫函数式编程

案例如下:

函数接口定义:

package com.qimh.functionainterface;

/**
 * 函数式接口
 * https://www.runoob.com/java/java8-functional-interfaces.html
 * https://blog.csdn.net/icarusliu/article/details/79495534
 */
@FunctionalInterface
public interface GreetingService {
    void sayMessage(String message);
}

测试类:

package com.qimh.functionainterface;

import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;

public class Main {
    public static void main(String[] args){
        //java8之前
        GreetingService c = new GreetingService() {
            @Override
            public void sayMessage(String message) {
                System.out.println("Hello " + message);
            }
        };
        c.sayMessage("李四");


        //java8
        /**
         * message -> System.out.println("Hello " + message);
         * "->"左边的 message 为入参
         * "->"右边的System.out.println("Hello " + message); 抽象方法的具体实现
         * 可参考匿名内部类来理解
         */
        GreetingService greetService1 = message -> System.out.println("Hello " + message);
        greetService1.sayMessage("张三");


        testPredicate();
    }


    public static void testPredicate(){
        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);

        // Predicate<Integer> predicate = n -> true
        // n 是一个参数传递到 Predicate 接口的 test 方法
        // n 如果存在则 test 方法返回 true

        System.out.println("输出所有数据:");

        // 传递参数 n
        eval(list, n->true);

        // Predicate<Integer> predicate1 = n -> n%2 == 0
        // n 是一个参数传递到 Predicate 接口的 test 方法
        // 如果 n%2  0 test 方法返回 true

        System.out.println("输出所有偶数:");
        eval(list, n-> n%2 == 0 );

        // Predicate<Integer> predicate2 = n -> n > 3
        // n 是一个参数传递到 Predicate 接口的 test 方法
        // 如果 n 大于 3 test 方法返回 true

        System.out.println("输出大于 3 的所有数字:");
        eval(list, n-> n > 3 );
    }

    public static void eval(List<Integer> list, Predicate<Integer> predicate) {
        for(Integer n: list) {

            if(predicate.test(n)) {
                System.out.println(n + " ");
            }
        }
    }
}

参考链接:

https://www.runoob.com/java/java8-functional-interfaces.html
 * https://blog.csdn.net/icarusliu/article/details/79495534 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部