这段代码怎么能不那么丑陋

2018-12-28 05:40:22 +08:00
 qwertyegg
public static void main(String[] args){
List<String> languages = Arrays.asList("Java", "Scala", "C++", "Haskell", "Lisp");
filter(languages, (str)->((String)str).length() > 4);
}

static void filter(List<String> names, Predicate condition) {
for(String name: names) {
if(condition.test(name)) {
System.out.println(name + " ");
}
}
}


第 3 行里面的 Lambda 表达式,如果不做强制转换似乎 str 会被认为是个 Object 而不是 String。可是这个强制转换太丑了,有没有优雅的处理方法?

update:

知道问题了, filer 方法里面应该给 Predicate 指定类型,改成这样
static void filter(List<String> names, Predicate<String> condition) {
for(String name: names) {
if(condition.test(name)) {
System.out.println(name + " ");
}
}
}
4349 次点击
所在节点    Java
13 条回复
liuhuansir
2018-12-28 07:40:41 +08:00
filter 需要自己实现么?很久没写 Java 了,jdk 里没有么?难怪说 Java 语言啰嗦
lhx2008
2018-12-28 08:14:18 +08:00
@liuhuansir 不用,只是楼主搞的不知道啥玩意
lhx2008
2018-12-28 08:17:13 +08:00
languages.stream().filter(str->str.length>4).forEach(System.out::println);
yxlaisj
2018-12-28 08:21:05 +08:00
也许楼主用的是 java7
liaojl
2018-12-28 08:29:06 +08:00
你都知道 lambda 了,竟然不知道 stream 吗。。。
anthow
2018-12-28 08:29:23 +08:00
@yxlaisj 7 没有 Predicate 吧
zydxn
2018-12-28 08:43:48 +08:00
languages.stream().filter(x -> x.length() > 4).forEach(System.out::println);
zydxn
2018-12-28 08:44:33 +08:00
@zydxn 啊 没注意 3#发过了
sagaxu
2018-12-28 08:55:28 +08:00
val languages = arrayOf("Java", "Scala", "C++", "Haskell", "Lisp")
languages.filter{it.length>4}.forEach(println)

Kotlin 欢迎你
Marstin
2018-12-28 09:01:14 +08:00
在¿为什么不用 markdown¿
wleexi
2018-12-28 09:10:28 +08:00
@Marstin 同感。甚至发个 gayhub 的外链都好啊。。
galikeoy
2018-12-28 09:18:13 +08:00
@Marstin 看着辣眼睛啊
geying
2018-12-28 16:49:03 +08:00
缩进一下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/521725

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX