一个很简单的东西,用c#...
List<string> keywords = ...; var result = keywords .GroupBy(k => k[0]) .ToDictionary( g => g.Key, g => g.OrderBy(k => k).ToList());
如果用 java...
List<String> keywords = ...;
keywords
.groupBy(
new F<String, Character> {
public Character f(String s) { return s.charAt(0); }
})
.toMap(
new F<Grouping<Character, String>, Character> {
public Character f(Grouping<Char, String> g) {
return g.getKey();
}
},
new F<Grouping<Character, String>, List<String>> {
public List<String> f(Grouping<Character, String> g) {
return g
.orderBy(
new F<String, String> {
public String f(String s) { return s; }
})
.toList();
}
});
彻底杯具了,唉,本来多么简单的问题,搞的这么复杂。
看看 Listener侦听的N种写法 http://blog.csdn.net/sunboy_2050/article/details/7489274
这些写法都很糟糕,都比不过委托,明明一个单纯的函数即可解决问题,非得搞一个类,弄得蛋疼无比。
还要另外的选择是scala,不过,我觉得太复杂的,表示压力很大。
用python也不错,但是,代码自动完成,自动重构,无语了。
我对java不算很熟,不知道那些java大师怎么想,他们到底是怎么过来的啊。
我的猜测:
1. 大多数时候写极其白痴简单的代码,压根用不了那么多特性,此时要的是语法白痴,代码长点无所谓
2. 写多了也就习惯了,也就不难看了,反正java是最完美的语言。
3. 没办法,为了向下兼容,只好不加入委托了。
4. 哥也不想用java啊,但为了混饭吃。
无论如何,我实在受不了这么冗长的代码。
就到这里,以后啥不爽,继续吐槽。。。
ps:我还是学生,学编程纯属爱好。
代码抄自"java黑": http://blog.zhaojie.me/2010/04/why-java-sucks-and-csharp-rocks-2-primitive-types-and-object-orientation.html