常用函数式接口

  • Predicate
    java.util.function.Predicate接口定义了一个名叫test的抽象方法,它接受泛型T对象,并返回一个boolean

    @FunctionalInterface
    public interface Predicate{
         boolean test(T t);
    }
    
    public static  List filter(List list, Predicate p) {
         List results = new ArrayList<>();
         for(T s: list){
             if(p.test(s)){
                   results.add(s);
             }
         }
         return results;
    } 
    
    Predicate nonEmptyStringPredicate = (String s) -> !s.isEmpty();
    List nonEmpty = filter(listOfStrings, nonEmptyStringPredicate); 
    
  • Consumer
    java.util.function.Consumer定义了一个名叫accept的抽象方法,它接受泛型T的对象,没有返回(void)。你如果需要访问类型T的对象,并对其执行某些操作,就可以使用这个接口。例如,可以创建一个ForEach方法

    @FunctionalInterface
    public interface Consumer{
         void accept(T t);
      }
    
    public static  void forEach(List list, Consumer c){ 
          for(T i: list){
               c.accept(i);
          }
    } 
    
    forEach(
             Arrays.asList(1,2,3,4,5),
             (Integer i) -> System.out.println(i)
           ); 
    
  • Function
    java.util.function.Function接口定义了一个叫作apply的方法,它接受一个泛型T的对象,并返回一个泛型R的对象。如果你需要定义一个Lambda,将输入对象的信息映射到输出,就可以使用这个接口

    @FunctionalInterface
    public interface Function{
         R apply(T t);
    }
    
    public static  List map(List list,
         Function f) {
         List result = new ArrayList<>();
             for(T s: list){
                 result.add(f.apply(s));
             }
             return result;
    }
    // [7, 2, 6]
    List l = map(
                         Arrays.asList("lambdas","in","action"),
                         (String s) -> s.length()
     ); 
    
image.png

image.png

你可能感兴趣的:(常用函数式接口)