美文网首页
java8-使用函数式接口

java8-使用函数式接口

作者: 罗志贇 | 来源:发表于2017-12-12 10:47 被阅读0次

    使用函数式接口

    Predicate

    @FunctionalInterface
    interface Predicate<T>{
        boolean test(T t);
    }
    
    public static <T> List<T> filter(List<T> list,Predicate<T> p){
            List<T> ts = new ArrayList<>();
            for (T t : list) {
                if (p.test(t)) {
                    ts.add(t);
                }
            }
            return ts;
    }
    

    Consumer

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

    Function

    @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 t : list) {
        result.add(f.apply(t));
      }
      return result;
    }
    
    public static void main(String[] args) {
      List<Integer> map = map(Arrays.asList("lambdas", "in", "action"), s -> s.length());
      System.out.println(map);
    }
    

    Lambdas及函数式接口的例子

    例子                                                                   对应接口
    布尔表达式: (List<String> list) -> list.isEmpty()                    Predicate<List<String>>
    创建对象:   () -> new Apple(10)                                     Supplier<Apple>
    消费一个对象:(Apple a) ->
       System.out.println(a.getWeight());                               Consumer<Apple>
    从一个对象中选择/提取:(String s )->s.length()                         Function<String,Integer>或
                                                                        ToIntFunction<String>
    合并两个值:(int a, int b)->a*b                                       IntBinaryOperator
    比较两个对象:(Apple a1,Apple a2)->                        BiFunction<Apple,Apple,Integeer>
      a1.getWeight().compareTo(a2.getWeight())                      或ToIntBiFunction<Apple,Apple>
    

    相关文章

      网友评论

          本文标题:java8-使用函数式接口

          本文链接:https://www.haomeiwen.com/subject/bfmgixtx.html