<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      java~lambda表達式讓查詢更優雅

      在java之前的版本里,如果希望從集合時查找符合條件的數據,如果先遍歷他,這種寫法是我們不能接受的,所以現在java有了lambda就很好的解決了這個問題,讓代碼更優雅一些!

      Predicate

        /**
         * lambda filter.
         * @param list
         * @param predicate
         * @return
         */
        public List<User> conditionFilter(List<User> list, Predicate<User> predicate){
          return list.stream().filter(predicate).collect(Collectors.toList());
        }

      上面的方法里有個predicate委托,他類似C++里的函數指針,和C#里的委托類似,他允許外面將一個表達式傳進來,與現有代碼很好的結偶了!

       /**
         * find list.
         */
        public void findList() {
          List<User> list = new ArrayList<>();
          list.add(new User("zzl"));
          list.add(new User("abc"));
          list.add(new User("bca"));
          list = conditionFilter(list, exe -> exe.getName() == "zzl");
          for (User user : list
              ) {
            System.out.println(user.getName());
      
          }
      
        }

      上面代碼在集合里查找了名字為zzl的記錄!

      下面讓委托實現了不等于的查找!

       /**
         * lambda filter not.
         *
         * @param subjects
         * @param predicate
         * @return
         */
        private List<User> conditionFilterNot(List<User> subjects, Predicate<User> predicate) {
      
          return subjects.stream().filter(predicate.negate()).collect(Collectors.toList());
        }

      事實上,java里的Predicate接口還有很多用法,想and,or也有支持!

      Consumer

      consumer允許外界傳入一個有參數但沒有返回值的方法原型,這在C#里類似于Action委托,在java里就是函數式接口的一個特例,人家java為咱們封裝了一下,開發人員可以直接用這個函數式

      接口了,它的原碼如下:

      @FunctionalInterface
      public interface Consumer<T> {
      
          void accept(T t);
        
          default Consumer<T> andThen(Consumer<? super T> after) {
              Objects.requireNonNull(after);
              return (T t) -> { accept(t); after.accept(t); };
          }
      }

      我們在平時使用時,比如可以寫個日志方法,而日志通過哪種方式持久化我們可能不確定,這時就可以使用Consumer來實現

        private void logger(Consumer<String> action, String msg) {
          action.accept(msg);
        }
      
       @Test
        public void lambda() {
          logger(i -> System.out.println(i), "hello");
        }

      在調用傳入打印方法時,就把日志打到控制臺上,而如果調用方將Slf4j的日志方法傳入時,就以這種方法寫日志。

       

       @Test
        public void lambdaLog() {
          logger(i -> logger.info(i), "hello");
        }

       

      參考資料:

      http://ifeve.com/predicate-and-consumer-interface-in-java-util-function-package-in-java-8/

      https://docs.oracle.com/javase/8/docs/api/java/util/function/Predicate.html

      posted @ 2018-04-24 11:33  張占嶺  閱讀(7467)  評論(2)    收藏  舉報
      主站蜘蛛池模板: 成人啪精品视频网站午夜| 亚洲精品国产一二三区| 亚洲熟少妇一区二区三区| 成人午夜在线观看日韩| 国产亚洲精品自在久久vr| 成人午夜大片免费看爽爽爽 | 日韩av一区二区三区在线| 亚洲欧美人成网站在线观看看| 被灌满精子的少妇视频| 亚洲香蕉网久久综合影视| 国产人妻大战黑人第1集| 精品国产一区AV天美传媒| 儋州市| 国产一区二区不卡精品视频| 日韩精品中文字幕国产一| 亚洲av无码片在线播放| 亚洲精品一区久久久久一品av| 色综合一本到久久亚洲91| 国产普通话对白刺激| 忘忧草社区在线www| 欧美日韩中文字幕视频不卡一二区| 日韩亚洲精品国产第二页| 精品国产成人三级在线观看 | 激情亚洲专区一区二区三区| 黄床大片免费30分钟国产精品| 中文字幕亚洲人妻系列| 亚洲精品一区二区三区大桥未久| 国产99在线 | 亚洲| 久久精品国产99国产精品严洲| 成人看的污污超级黄网站免费 | 91久久久久无码精品露脸| 国产情侣激情在线对白| 亚洲熟妇在线视频观看| 成年在线观看免费人视频 | 同心县| 伊人久久大香线蕉综合网| 国产精品美女久久久久久麻豆| 成人午夜福利视频一区二区| 亚洲岛国av一区二区| 丰满少妇呻吟高潮经历| 亚洲精品香蕉一区二区|