zoukankan      html  css  js  c++  java
  • Java 8 内置四大核心函数式接口

    1、四大核心函数式接口

    接口类型 表现形式 实现方法 说明
    消费性接口 Consumer<T> void accept<T t> 参数为 t,无返回值
    供给型接口 Supplier<T> T get() 无参数,返回值类型为 T
    函数型接口 Function<T,R> R apply(T t) 参数为 t,返回值类型为 R
    断言型接口 Predicate<T> Boolean test(T t) 参数为 t,返回值类型为 Boolean

     

      

      

      

      

     

    2、四大核心函数接口实践

    public class LambdaDemo {
        // 1、消费性接口测试
        @Test
        public void testLambda01() {
            someThingHappy("summer", (x) -> {
                String str = x;
                System.out.println("某个人喜欢大保健,他觉得只有大保健能让他快乐,这个人就是 " + x);
            });
        }
    
        // 2、供给型接口测试
        @Test
        public void testLambda02() {
            List<String> strEqualTo5 = getStrEqualTo5(() -> {
                String[] strArr = {"summer", "erico", "puff", "defire", "hank"};
                List<String> list = Arrays.asList(strArr);
                ArrayList<String> strList = new ArrayList<>();
    
                for (String str : list) {
                    if (str.length() == 4) {
                        strList.add(str);
                    }
                }
                return strList;
            });
            System.out.println(strEqualTo5);
        }
    
        // 3、函数型接口测试
        @Test
        public void testLambda03() {
            Integer index = getIndexFromArray((x) -> {
                int i = 0;
                for (int j = 0; j < x.length; j++) {
                    if (Objects.equals(x[j], "summer")) {
                        i = j;
                    }
                }
                return i;
            });
            System.out.println(index);
        }
    
        // 4、断言型接口测试
        @Test
        public void testLambda04() {
            Boolean isEricoExists = checkUser((x) -> {
                Boolean flag = false;
                for (String str : x) {
                    if (Objects.equals(str, "erico")) {
                        flag = true;
                    }
                }
                return flag;
            });
            System.out.println(isEricoExists);
        }
    
        // 需求 1、输出一段快乐的话
        // Consumer<T> : 消费性接口
        // void accept(T t)
        public void someThingHappy(String userName, Consumer<String> consumer) {
            consumer.accept(userName);
        }
    
        // 需求 2、返回一个集合,集合中存放长度等于 5 的字符串
        // Supplier<T> : 供给型接口
        // T get();
        public List<String> getStrEqualTo5(Supplier<List<String>> supplier) {
            return supplier.get();
        }
    
        // 需求 3、筛选出名称为 summer 的用户,并返回其在数组中的索引位置
        // Function<T,R>
        // R apply(T t)
        public Integer getIndexFromArray(Function<String[], Integer> function) {
            String[] strArr = {"erico", "puff", "defire", "hank", "summer"};
            return function.apply(strArr);
        }
    
        // 需求 4、判断指定的集合中是否存在一个叫 erico 的人
        // Predicate<T>
        // Boolean test<T>
        public Boolean checkUser(Predicate<List<String>> predicate) {
            String[] strArr = {"erico", "puff", "defire", "hank", "summer"};
            List<String> listStr = Arrays.asList(strArr);
            return predicate.test(listStr);
        }
    }
  • 相关阅读:
    重构技巧 引入Null对象
    python yield
    todo
    Python 函数式编程学习
    Python 修饰器
    socket
    Exception、RuntimeException
    设计模式
    线程池
    VMware异常关闭后再次启动提示“以独占方式锁定此配置文件失败”!!!
  • 原文地址:https://www.cnblogs.com/xiaomaomao/p/14904806.html
Copyright © 2011-2022 走看看