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類,我們就可以輕松的實現可配置的遍歷行為了。

           

           

          主站蜘蛛池模板: 邯郸市| 清水县| 奉化市| 定兴县| 闵行区| 兰溪市| 桐乡市| 乌拉特后旗| 韩城市| 陆丰市| 怀集县| 星子县| 崇礼县| 卓尼县| 元谋县| 巴彦淖尔市| 庄浪县| 平定县| 乐山市| 乌鲁木齐县| 临澧县| 当雄县| 调兵山市| 始兴县| 宕昌县| 玉屏| 灌云县| 通城县| 姚安县| 余庆县| 泾阳县| 左贡县| 新龙县| 巴塘县| 孟州市| 莱芜市| 乌兰察布市| 宁河县| 南澳县| 同江市| 五原县|