• java8中使用函数式接口


    使用函数式接口

    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>
    
  • 相关阅读:
    [NOIP模拟赛][贪心]奶牛晒衣服.
    BZOJ3750: [POI2015]Piecz
    BZOJ2348 [Baltic 2011]Plagiarism
    高精度乘法【高乘高
    codevs 1215 迷宫
    变量交换
    a+b问题与圆柱体表面积的计算
    算数表达式的练习
    [bzoj1070][SCOI2007]修车[ 网络流]
    [bzoj2502]清理雪道[上下界网络流]
  • 原文地址:https://www.cnblogs.com/luozhiyun/p/7932013.html
Copyright © 2020-2023  润新知