V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qwertyegg
V2EX  ›  Java

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

  •  
  •   qwertyegg · 2018-12-28 05:40:22 +08:00 · 4554 次点击
    这是一个创建于 2164 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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 + " ");
    }
    }
    }
    13 条回复    2018-12-28 16:49:03 +08:00
    liuhuansir
        1
    liuhuansir  
       2018-12-28 07:40:41 +08:00 via iPhone
    filter 需要自己实现么?很久没写 Java 了,jdk 里没有么?难怪说 Java 语言啰嗦
    lhx2008
        2
    lhx2008  
       2018-12-28 08:14:18 +08:00 via Android
    @liuhuansir 不用,只是楼主搞的不知道啥玩意
    lhx2008
        3
    lhx2008  
       2018-12-28 08:17:13 +08:00 via Android   ❤️ 1
    languages.stream().filter(str->str.length>4).forEach(System.out::println);
    yxlaisj
        4
    yxlaisj  
       2018-12-28 08:21:05 +08:00 via Android
    也许楼主用的是 java7
    liaojl
        5
    liaojl  
       2018-12-28 08:29:06 +08:00 via Android
    你都知道 lambda 了,竟然不知道 stream 吗。。。
    anthow
        6
    anthow  
       2018-12-28 08:29:23 +08:00
    @yxlaisj 7 没有 Predicate 吧
    zydxn
        7
    zydxn  
       2018-12-28 08:43:48 +08:00
    languages.stream().filter(x -> x.length() > 4).forEach(System.out::println);
    zydxn
        8
    zydxn  
       2018-12-28 08:44:33 +08:00
    @zydxn 啊 没注意 3#发过了
    sagaxu
        9
    sagaxu  
       2018-12-28 08:55:28 +08:00 via Android
    val languages = arrayOf("Java", "Scala", "C++", "Haskell", "Lisp")
    languages.filter{it.length>4}.forEach(println)

    Kotlin 欢迎你
    Marstin
        10
    Marstin  
       2018-12-28 09:01:14 +08:00
    在¿为什么不用 markdown¿
    wleexi
        11
    wleexi  
       2018-12-28 09:10:28 +08:00
    @Marstin 同感。甚至发个 gayhub 的外链都好啊。。
    galikeoy
        12
    galikeoy  
       2018-12-28 09:18:13 +08:00
    @Marstin 看着辣眼睛啊
    geying
        13
    geying  
       2018-12-28 16:49:03 +08:00
    缩进一下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2854 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 06:14 · PVG 14:14 · LAX 22:14 · JFK 01:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.