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

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

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

    Vincent.Chan‘s Blog

    常用鏈接

    統計

    積分與排名

    網站

    最新評論

    [Jakarta Commons筆記] Commons Collections - Closure組

    接下來看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

    posted on 2006-03-10 23:15 Vincent.Chen 閱讀(227) 評論(0)  編輯  收藏 所屬分類: Java

    主站蜘蛛池模板: 人妻18毛片a级毛片免费看| 久久久久精品国产亚洲AV无码| 亚洲精品视频在线看| 狼友av永久网站免费观看| 成人免费a级毛片无码网站入口| 99久久免费国产精品特黄| 6080午夜一级毛片免费看| 十八禁无码免费网站| 7x7x7x免费在线观看| 222www免费视频| 亚洲视频在线观看免费| 亚洲AV无码专区在线播放中文 | 久久99毛片免费观看不卡| 国内精品99亚洲免费高清| 拍拍拍无挡免费视频网站| 免费一区二区三区| 8x成人永久免费视频| 台湾一级毛片永久免费| 大地资源免费更新在线播放| 精品剧情v国产在免费线观看| 国产男女猛烈无遮挡免费视频网站| 国产免费午夜a无码v视频| 亚洲AⅤ永久无码精品AA | 免费A级毛片无码免费视| 扒开双腿猛进入爽爽免费视频| 日韩中文字幕免费| 亚洲AV成人精品日韩一区18p| 日韩一卡2卡3卡4卡新区亚洲 | 欧美大尺寸SUV免费| 日本不卡在线观看免费v| 亚洲国产成人精品91久久久| 亚洲区小说区图片区QVOD| 亚洲无成人网77777| 亚洲精品无码中文久久字幕| 三级片免费观看久久| 久久午夜夜伦鲁鲁片无码免费| 亚洲天堂免费在线| 四虎永久免费网站免费观看| 亚洲乱码国产一区三区| 亚洲国产成人久久| 国产AV无码专区亚洲AV琪琪|