Read Sean

          Read me, read Sean.
          posts - 508, comments - 655, trackbacks - 9, articles - 4

          [Jakarta Commons筆記] Commons Collections - Iterator組

          Posted on 2005-08-06 12:47 laogao 閱讀(1858) 評論(0)  編輯  收藏 所屬分類: On Java

           

          來看最后一組 – Iterator。

           

          LoopingIterator

          ArrayListIterator

          FilterIterator

          UniqueFilterIterator

          IteratorUtils

           

          java.util.Iterator接口定義了標準的Collection遍歷方法,但是如果不做改變的使用它,我們得到的是從頭到尾一次性的遍歷。假如我們需要循環遍歷,假如我們需要遍歷某一段,假如我們需要遍歷滿足某些條件的元素,等等等等,我們就不能完全依賴于這個Iterator的標準實現了。除非我們寧可在此基礎上在調用的代碼中多加一些判斷,不過這樣的話代碼就會顯得混亂,時間長了就容易變得難以維護。Commons Collections的這一組Iterator為我們帶來了便利。

           

          這些Iterator使用都很一目了然,直接看例子吧:

           

          package sean.study.commons.collections;

           

          import java.util.Arrays;

          import java.util.Iterator;

          import java.util.List;

           

          import org.apache.commons.collections.Predicate;

          import org.apache.commons.collections.iterators.ArrayListIterator;

          import org.apache.commons.collections.iterators.FilterIterator;

          import org.apache.commons.collections.iterators.LoopingIterator;

          import org.apache.commons.lang.StringUtils;

           

          public class IteratorUsage {

           

              public static void main(String[] args) {

                  demoIteratorUsage();

              }

             

              public static void demoIteratorUsage() {

           

                  System.out.println(StringUtils.center(" demoClosureUsage ", 40, "="));

                 

                  // data setup

                  String[] weekDays = {

                      "Monday", "Tuesday", "Wednesday",

                      "Thursday", "Friday", "Saturday", "Sunday"

                  };

                  List weekDayList = Arrays.asList(weekDays);

                 

                  // workdays

                  Iterator iter1 = new ArrayListIterator(weekDays, 0, 5);

                  printColl("Partial:", iter1, 5);

                 

                  // loop

                  Iterator iter2 = new LoopingIterator(weekDayList);

                  printColl("Loop:", iter2, 10);

                 

                  // looping workdays

                  Predicate notWeekendPredicate = new Predicate() {

                      public boolean evaluate(Object obj) {

                          String str = (String) obj;

                          if ("Saturday".equalsIgnoreCase(str)) {

                              return false;

                          }

                          if ("Sunday".equalsIgnoreCase(str)) {

                              return false;

                          }

                          return true;

                      }

                  };

                  Iterator iter3 = new FilterIterator(

                      new LoopingIterator(weekDayList),

                      notWeekendPredicate

                  );

                  printColl("No Weekends loop:", iter3, 12);

                 

                  System.out.println(StringUtils.repeat("=", 40));

           

              }

             

              public static void printColl(String label, Iterator iter, int maxCount) {

                  if (StringUtils.isNotBlank(label)) {

                      System.out.println(label);

                  }

                  int i = 0;

                  while (iter.hasNext() && i < maxCount) {

                      System.out.println("# " + iter.next() + " #");

                      i++;

                  }

              }

           

          }

           

          運行結果如下:

           

          =========== demoClosureUsage ===========

          Partial:

          # Monday #

          # Tuesday #

          # Wednesday #

          # Thursday #

          # Friday #

          Loop:

          # Monday #

          # Tuesday #

          # Wednesday #

          # Thursday #

          # Friday #

          # Saturday #

          # Sunday #

          # Monday #

          # Tuesday #

          # Wednesday #

          No Weekends loop:

          # Monday #

          # Tuesday #

          # Wednesday #

          # Thursday #

          # Friday #

          # Monday #

          # Tuesday #

          # Wednesday #

          # Thursday #

          # Friday #

          # Monday #

          # Tuesday #

          ========================================

           

          有了這些實用的Iterator類,我們就可以輕松的實現可配置的遍歷行為了。

           

           

          主站蜘蛛池模板: 齐河县| 龙井市| 保山市| 湖北省| 固原市| 鹤壁市| 泽普县| 太保市| 出国| 麻江县| 东兰县| 长乐市| 图木舒克市| 合肥市| 五指山市| 安吉县| 赣州市| 丁青县| 光泽县| 永宁县| 西乌珠穆沁旗| 随州市| 张掖市| 星子县| 廉江市| 阿克苏市| 南和县| 无锡市| 闽侯县| 社旗县| 冕宁县| 聂拉木县| 诸城市| 耒阳市| 徐闻县| 漳浦县| 福州市| 积石山| 安西县| 万盛区| 大庆市|