提炼函数案例 一次循环中完成多个任务

提炼函数案例 一次循环中完成多个任务

参考

修改代码的艺术 6.1 新生方法

原始代码

需求:只对没有发布过的entry进行发布日期并且添加到列表中。

public class TransactionGate{
	public void postEntries(List entries){
		for(Iterator it = entries.iterator(); it.hasNext();){
			Entry entry = (Entry) it.next();
			entry.postDate();
		}
		transactionBundle.getListManager().add(entriesToAdd);
	}
}

方式一

public class TransactionGate{
	/*
	我们将2个操作混在一起了:一个是日期发送,另一个是重复项检查。
	*/
	public void postEntries(List entries){
		List entriesToAdd = new LinkedList();
		for(Iterator it = entries.iterator(); it.hasNext();){
			Entry entry = (Entry) it.next();
			if(!transactionBundle.getListManager().hasEntry(entry){
				entry.postDate();
				entriesToAdd.add(entry);
			}
		}
		transactionBundle.getListManager().add(entriesToAdd);
	}
}

方式二

public class TransactionGate{
	public List uniqueEntries(List entries){
		List result = new LinkedList();
		for(Iterator it = entries.iterator(); it.hasNext();){
			Entry entry = (Entry) it.next();
			if(!transactionBundle.getListManager().hasEntry(entry){
				result.add(entry);
			}
		}
		return result;
	}
    /*
        当再出现一些针对非重复项的操作的时候,我们可以创建独立的方法来处理这些新的操作。
    */
    public void postEntries(List entries){
        List entriesToAdd = uniqueEntries(entries);
        for(Iterator it = entries.iterator(); it.hasNext();){
            Entry entry = (Entry) it.next();
            entry.postDate();
        }
        transactionBundle.getListManager().add(entriesToAdd);
    }
}
posted @ 2020-02-01 12:26  没有理由不会呀  阅读(195)  评论(0编辑  收藏  举报