<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 閱讀(2162) 評論(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判定再決定執行哪一個Closure;SwitchClosureSwitchTransformer類似,根據創建時傳入的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年來看依然很受用
    主站蜘蛛池模板: 亚洲产国偷V产偷V自拍色戒| 免费人成大片在线观看播放电影| 亚洲大片在线观看| 亚洲熟女一区二区三区| 国产亚洲视频在线观看| 国产又黄又爽又猛的免费视频播放| 亚洲乱码一二三四区乱码| 日韩在线视频免费看| 亚洲日本va一区二区三区| 亚洲日本va午夜中文字幕久久| 国产情侣久久久久aⅴ免费 | 国产成人精品亚洲2020| 日韩高清免费在线观看| 国产精品网站在线观看免费传媒| 亚洲午夜电影一区二区三区| 亚洲精品国精品久久99热| 182tv免费视视频线路一二三| 亚洲精品无码永久在线观看男男| 亚洲人成人无码网www电影首页| 免费观看无遮挡www的视频| 成人嫩草影院免费观看| ww亚洲ww在线观看国产| 亚洲美女又黄又爽在线观看| 性做久久久久久久免费看| 成人片黄网站色大片免费观看APP| 亚洲综合一区无码精品| 久久亚洲精品中文字幕三区| 日韩成全视频观看免费观看高清| 久操视频在线免费观看| 一本色道久久综合亚洲精品| 毛片a级毛片免费播放100| 一级毛片全部免费播放| 日韩电影免费在线观看网址 | 光棍天堂免费手机观看在线观看| 亚洲第一男人天堂| 亚洲av无码国产精品夜色午夜| 国产传媒在线观看视频免费观看| 亚洲A∨午夜成人片精品网站| 免费国产午夜高清在线视频| 男女男精品网站免费观看| 精品亚洲成a人片在线观看|