zoukankan      html  css  js  c++  java
  • lambda的函数式接口

      函数式接口就是只包含一个抽象方法的接口A(不包括默认抽象方法,但包括继承来的方法);这个接口用来作为一个可变作用的方法B的参数。函数式接口的抽象方法的参数类型和返回值就是一套签名,这个签名叫做函数描述符,可以描述lambda的类型。@FunctionalInterface

       1.8给了几个用来描述常见函数描述符的函数式接口:Predicate、Consumer、Function

       1、Predicate

        Predicate接口定义了一个名为test的抽象方法,它接受泛型T的对象,返回一个boolean。就是传进来任意对象在方法中用来判断是否(断言)。

    @FunctionalInterface
        public interface Predicate<T>{
            boolean test(T t);
        }
    
        public static<T> List<T> filter(List<T> list,Predicate<T> p){
            List<T> results= new ArrayList<>();
            for(T s:list){
                if(p.test(s)){
                    results.add(s);
                }
            }
        return results;
        }   
    
    Predicate<String> nonEmptyStringPredicate=(String s)->!s.isEmpty();
    List<String> nonEmpty=filter(listOfStrings,nonEmptyPredicate);

         2、Consumer

        Consumer接口定义了一个accept()的方法,参数为一个泛型T,返回值为空;就是消费的意思,方法将传入的泛型对象进行某些操作处理就消费空了。

    @FunctionalInterface
    public interface Consumer<T>{
        void accept(T t);
    }
       
    public static <T> void forEach(List <T> list,Consumer<T> c){
        for(T i:list){
            c.accept(i);
        }
    }
    
    forEach(Arrays.asList(1,2,3,4,5),(Integer i)->System.out.println(i));

      

        3、function

        function接口定义了一个apply()的方法,它接受一个泛型T的对象,并返回一个泛型R的对象。通过该接口的抽象方法就可以将一种泛型经过一系列操作变为另一种泛型。

    @FunctionalInterface
    public interface Function<T,R>{
        R apply(T t);
    }
    
    public static<T,R> List<R> map(List<T> list,Function<T,R>  f){
        List<R> result = new ArrayList<>();
        for(T s:list){
            result.add(f.apply(s));
        }
        return result;
    }
    
    List<Integer> l=map(Arrays.aslist("lambdas","in","action"),(String s)->s.length());
  • 相关阅读:
    jquey插件开发
    平常问题传送门
    Angular1实战总结01:了不起的$cacheFactory
    node基础15:events模块
    node基础14:连接数据库
    node基础13:异步流程控制
    node基础12:动态网页
    node基础11:接受参数
    node基础10:处理异常
    IOS子视图超过父视图frame后,无法交互响应
  • 原文地址:https://www.cnblogs.com/television/p/9274163.html
Copyright © 2011-2022 走看看