`
zhang_xzhi_xjtu
  • 浏览: 524404 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

实践中的重构30_不做油漆匠

 
阅读更多
油漆匠的故事是编程文化中的一个著名故事。本地化如下。
小强毕业后得到一份街道办油漆匠的工作,工作内容是在马路中间喷涂油漆画线。上班第一天,他拿出一罐环保漆来到他负责的路段,喷涂了300米长的线。“小伙子很给力啊!”街道办徐大妈称赞道,然后给了他300大洋作为工钱。第二天,小强只喷涂了150米。“是不是昨晚没有睡好啊。算了,还是比原来的老王头麻利多了,还是小伙子干活又好又快啊。”徐大妈又掏了150大洋。第三天,小强只喷涂了30米长的马路。“才30米,怎么搞的!明天不用来了!”徐大妈已经不能忍受了。小强一边擦汗,一边委屈的说:“徐大妈,累死我了,现在画一点线要跑好远,油漆罐太远了。”
大家都是当笑话看,可惜这个笑话时不时的发生在你我身上。
	public ArrayList<String> generateWords_0(String[] lines) {
		ArrayList<String> uniques = new ArrayList<String>();
		for (int i = 0; i < lines.length; i++) {
			List<String> words = split(lines[i]);
			for (int j = 0; j < words.size(); j++)
				if (!uniques.contains(words.get(j)))
					uniques.add(words.get(j));

		}
		return uniques;
	}

一边看这段程序,一边想着油漆匠的故事。油漆匠离我们并不遥远。
这段程序可以使用java集合框架类的特性重构如下。
注意,这段代码的需求必须返回单词的列表集合,但是不关心单词的顺序。
	public List<String> generateWords_1(String[] lines) {
		Set<String> words = new HashSet<String>();
		for (String line : lines) {
			words.addAll(split(line));
		}
		return new ArrayList<String>(words);
	}
分享到:
评论
1 楼 飞天奔月 2017-01-15  
public List<String> generateWords_1(String[] lines) { 
    return new ArrayList<String>(new LinkedHashSet<String>(Arrays.asList(lines)));

相关推荐

Global site tag (gtag.js) - Google Analytics