zoukankan      html  css  js  c++  java
  • jdk8 Function

    例子 1:

    // 定义function
    Function<String, String> fun = parm -> {
    // 这里是定function中的逻辑
    return String.valueOf(parm + "xing");
    };
    
    Function<String, String> fun1 = parm -> {
    // 这里是定function中的逻辑
    return String.valueOf(parm + "sheng");
    };
    /*
    * @param a 第一个执行
    * @param fun 第三个
    * @param fun1 第二个
    * @return
    */
    public static String test3(String a, Function<String, String> fun,Function<String, String> fun1) {
    return fun.compose(fun1).apply(a);
    }
    // compose 源码
    default <V> Function<V, R> compose(Function<? super V, ? extends T> before) {
       Objects.requireNonNull(before);
       return (V v) -> apply(before.apply(v));
    }
    System.out.println(test3("zhang",fun,fun1));
    // 输出结果 zhangshengxing

    // 例子2 list 转map

    // 初始化 测试数据
    List<User>userList=new ArrayList<>(); userList.add(User.builder().age(10).name("zhang").build()); userList.add(User.builder().age(11).name("wang").build()); userList.add(User.builder().age(12).name("li").build()); userList.add(User.builder().age(13).name("zhao").build()); userList.add(User.builder().age(14).name("sun").build());
    /**
    *
    注:Flux 是 reactor 框架中的类,表示0~1个异步序列。Flux.fromIterable(a) 从a中获取一个 Iterable遍历器
       从a中获取一个 Iterable遍历器,并使用collectMap(fun,fun1) 函数式方法,block 是堵塞 直到遍历完成
       Map<V,R> : V 是map的key,     R map的值
       例子2 是将list 转为 map<name,age> 形式.
    调用 test7(userList,User::getName,User::getAge) 此时,User::getName 是 fun的执行逻辑,User::getAge 是 fun1 的执行逻辑。这两个方法引用
    就是从遍历的User中取出name和age 。 Fun<K,V> V 为出参,也就是map 的 key Fun1<K,R> R为出参,也就是map 的 value Fun,fun1 必须要和 map<V,R> 对应
    * @param a 数据源 * @param fun key 逻辑 * @param fun1 value 逻辑 * @param <K> 数据源类型 * @param <V> key 类型 * @param <R> value 类型 * @return
    */ public static <V,R,K> Map<V,R> test7(List<K> a, Function<K,V> fun, Function<K,R> fun1) { return Flux.fromIterable(a).collectMap(fun,fun1).block(); }
    Map<String,Integer>map=test7(userList,User::getName,User::getAge)
    // 输出结果 {"zhang":10,"wang":11,"zhao":13,"li":12,"sun":14}

    如果有错误 请大家留言指出

  • 相关阅读:
    [R] read.table的check.names参数防止读入数据时列名前自动加上"X."
    【宏基因组】MEGAN4,MEGAN5和MEGAN6的Linux安装和使用
    洛谷—— P1077 摆花
    洛谷—— P2733 家的范围 Home on the Range
    BZOJ——T 1801: [Ahoi2009]chess 中国象棋
    洛谷—— P1379 八数码难题
    BZOJ——T 1800: [Ahoi2009]fly 飞行棋
    几种outofmemory
    几种常见web攻击手段及其防御方式
    JVM参数
  • 原文地址:https://www.cnblogs.com/zhangXingSheng/p/10743465.html
Copyright © 2011-2022 走看看