糊言亂語

          志未半斤, 才無八兩. 有苦有樂, 糊涂過活。
          posts - 25, comments - 7, trackbacks - 0, articles - 42
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

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

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 延庆县| 锡林郭勒盟| 湘西| 丰台区| 定南县| 广汉市| 康马县| 六盘水市| 仁布县| 潞西市| 廉江市| 南川市| 建平县| 板桥市| 长葛市| 阿巴嘎旗| 宕昌县| 莱阳市| 南皮县| 昌都县| 黔东| 桂平市| 鄂托克前旗| 兰州市| 井冈山市| 玉门市| 颍上县| 扶沟县| 崇明县| 宁都县| 信宜市| 兴山县| 新兴县| 苗栗县| 祥云县| 揭西县| 枣阳市| 林甸县| 成都市| 济阳县| 桃园市|