<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年來看依然很受用
    主站蜘蛛池模板: 亚在线观看免费视频入口| 免费爱爱的视频太爽了| 亚洲色大成网站WWW国产| 免费国产成人高清视频网站| 亚洲国产成人久久一区久久| 色噜噜亚洲男人的天堂| 亚洲第一网站免费视频| 亚洲精品国产摄像头| 久久亚洲国产精品123区| 羞羞视频免费网站日本| 亚洲ⅴ国产v天堂a无码二区| 国产真人无码作爱视频免费 | 永久免费bbbbbb视频| 亚洲另类古典武侠| 免费人成在线观看网站视频 | 久久成人免费大片| 中文字幕无码亚洲欧洲日韩| 国产亚洲美日韩AV中文字幕无码成人| 曰批全过程免费视频免费看 | 亚洲AV日韩精品久久久久久久| 国产免费AV片在线观看播放| 亚洲综合亚洲国产尤物| 男人的天堂亚洲一区二区三区 | 亚洲色偷偷偷网站色偷一区| 99re免费在线视频| 亚洲大片免费观看| 国产成人精品亚洲精品| 久久国产一片免费观看| 亚洲国产综合精品中文第一| 亚洲乱码一区二区三区在线观看| 久久青草精品38国产免费| 亚洲av乱码一区二区三区按摩| 成人亚洲综合天堂| 国内精品乱码卡1卡2卡3免费| 亚洲日韩亚洲另类激情文学| 亚洲精品无码不卡| 亚洲成年看片在线观看| 全免费a级毛片免费看无码| 亚洲一级毛片免费观看| 任你躁在线精品免费| 黄床大片30分钟免费看|