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 閱讀(1864) 評論(0)  編輯  收藏 所屬分類: On Java

           

          來看最后一組 – Iterator。

           

          LoopingIterator

          ArrayListIterator

          FilterIterator

          UniqueFilterIterator

          IteratorUtils

           

          java.util.Iterator接口定義了標(biāo)準(zhǔn)的Collection遍歷方法,但是如果不做改變的使用它,我們得到的是從頭到尾一次性的遍歷。假如我們需要循環(huán)遍歷,假如我們需要遍歷某一段,假如我們需要遍歷滿足某些條件的元素,等等等等,我們就不能完全依賴于這個(gè)Iterator的標(biāo)準(zhǔn)實(shí)現(xiàn)了。除非我們寧可在此基礎(chǔ)上在調(diào)用的代碼中多加一些判斷,不過這樣的話代碼就會顯得混亂,時(shí)間長了就容易變得難以維護(hù)。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++;

                  }

              }

           

          }

           

          運(yùn)行結(jié)果如下:

           

          =========== 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 #

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

           

          有了這些實(shí)用的Iterator類,我們就可以輕松的實(shí)現(xiàn)可配置的遍歷行為了。

           

           

          主站蜘蛛池模板: 晴隆县| 永康市| 安图县| 三明市| 乌兰察布市| 灵璧县| 黄大仙区| 大庆市| 台中县| 双峰县| 永宁县| 高陵县| 建湖县| 华容县| 南安市| 淮滨县| 云阳县| 靖边县| 尖扎县| 思茅市| 鄯善县| 永济市| 麻栗坡县| 巴南区| 四平市| 饶平县| 娄烦县| 建水县| 依安县| 昭平县| 牙克石市| 玛多县| 赤峰市| 平定县| 东丰县| 微山县| 泌阳县| 崇州市| 北流市| 乌海市| 吉林市|