<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Read Sean

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

    [Jakarta Commons筆記] Commons Collections - Closure組

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

     

    接下來看Closure組。

     

    Closure

    ChainedClosure

    IfClosure

    WhileClosure

    ClosureUtils

     

    Closure這一組接口和類提供一個操作對象的execute方法,為我們在處理一系列對象時可以將處理邏輯分離出來。理論上講,使用Transformer也可以達到類似的效果,只要輸出對象和輸入對象是同一個對象就好,但是Closure接口定義的execute方法返回void,并且從效果和功能區分上,Closure可以更好的詮釋對象處理或執行的意思。而事實上,ClosureUtils中也提供了一個asClosure方法包裝一個現成的Transformer

     

    沿用前面的Emploee類,我們來給一組員工漲工資:

     

    package sean.study.commons.collections;

     

    import java.util.Arrays;

    import java.util.Collection;

    import java.util.Date;

    import java.util.Iterator;

     

    import org.apache.commons.collections.Closure;

    import org.apache.commons.collections.CollectionUtils;

    import org.apache.commons.lang.StringUtils;

     

    public class ClosureUsage {

     

        public static void main(String[] args) {

            demoClosureUsage();

        }

       

        public static void demoClosureUsage() {

     

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

           

            // data setup

            Employee[] employees = new Employee[] {

                new Employee("Tony", 26, new Date(), "E4", 2000),

                new Employee("Michelle", 24, new Date(), "E4", 2000),

                new Employee("Jack", 28, new Date(), "E5", 3000)

            };

            Collection empColl = Arrays.asList(employees);

            printColl("Before salary increase:", empColl);

           

            // closure setup

            Closure salaryIncreaseClosure = new Closure() {

                public void execute(Object obj) {

                    Employee emp = (Employee) obj;

                    emp.setSalary(emp.getSalary() * 1.20);

                }

            };

           

            // salary increase

            CollectionUtils.forAllDo(empColl, salaryIncreaseClosure);

            printColl("After salary increase:", empColl);

     

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

        }

       

        public static void printColl(String label, Collection c) {

            if (StringUtils.isNotBlank(label)) {

                System.out.println(label);

            }

            Iterator iter = c.iterator();

            while (iter.hasNext()) {

                System.out.println(iter.next());

            }

        }

    }

     

    以下是運行結果:

     

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

    Before salary increase:

    Employee[name=Tony,age=26,dateJoined=2005-08-05,grade=E4,salary=2000.0]

    Employee[name=Michelle,age=24,dateJoined=2005-08-05,grade=E4,salary=2000.0]

    Employee[name=Jack,age=28,dateJoined=2005-08-05,grade=E5,salary=3000.0]

    After salary increase:

    Employee[name=Tony,age=26,dateJoined=2005-08-05,grade=E4,salary=2400.0]

    Employee[name=Michelle,age=24,dateJoined=2005-08-05,grade=E4,salary=2400.0]

    Employee[name=Jack,age=28,dateJoined=2005-08-05,grade=E5,salary=3600.0]

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

     

    我這里舉的是一個相對簡單的例子,在Closure這一組還有一些很方便的類,如ChainedClosure可以包裝一組Closure作為整體執行;IfClosure在創建時需要提供給它一個Predicate和兩個Closure,執行時先做Predicate判定再決定執行哪一個ClosureSwitchClosureSwitchTransformer類似,根據創建時傳入的Predicate組和Closure組對應執行;WhileClosure則根據創建時傳入的Predicate做判斷,如果為true則執行Closure,直到Predicate返回false;等等。

     

    具體用法請參考Javadoc

     

     

    Feedback

    # re: [Jakarta Commons筆記] Commons Collections - Closure組  回復  更多評論   

    2008-05-16 13:47 by nickevin
    05年的帖 08年來看依然很受用
    主站蜘蛛池模板: 成人免费福利视频| 久久亚洲精品成人无码| 亚洲av永久无码精品古装片 | 亚洲爆乳无码专区www| 亚洲AV成人影视在线观看| 亚洲免费在线观看视频| 国产精品亚洲专区在线观看| 中中文字幕亚洲无线码| 亚洲精品无码专区久久| 最新亚洲人成无码网站| 特级无码毛片免费视频| 一个人看的www免费高清 | 337p欧洲亚洲大胆艺术| 亚洲精品在线电影| 亚洲精品天堂在线观看| 日本亚洲欧美色视频在线播放| 亚洲国产成人久久精品大牛影视| 在线观看亚洲专区| 一个人看的www在线免费视频 | 国产偷国产偷亚洲高清在线| 男男gvh肉在线观看免费| 九九综合VA免费看| a级毛片免费全部播放| 亚欧日韩毛片在线看免费网站| 四虎1515hh永久久免费| 日本免费一二区在线电影| 亚洲av午夜精品一区二区三区| 曰韩亚洲av人人夜夜澡人人爽| 久久青青成人亚洲精品| 亚洲中文字幕久久精品无码2021| 亚洲精品无播放器在线播放| 日本特黄特色AAA大片免费| 国产在线观a免费观看| h视频在线免费看| 美女被免费视频网站a国产 | 国内精自视频品线六区免费| 四虎在线免费播放| 亚洲综合图色40p| 亚洲乱码卡一卡二卡三| 免费人成网站永久| 午夜精品射精入后重之免费观看|