代码之家  ›  专栏  ›  技术社区  ›  Tetsujin no Oni

在.NET中是否有一个等价于谓词< t>方法的Java 1.5?

  •  8
  • Tetsujin no Oni  · 技术社区  · 15 年前

    具体来说,我正在寻找与 Collection<T>.TrueForAll / Exists 等。

    要编写一个Frach循环来检查每个对象上的方法的返回是很难闻的,所以我希望有一个更好的Java习语。

    3 回复  |  直到 10 年前
        1
  •  12
  •   erickson    15 年前
        2
  •  6
  •   Apocalisp    15 年前

    Functional Java 提供一流的功能。谓词表示为 F<T, Boolean> . 例如,这里有一个程序测试数组是否存在一个全是小写字母的字符串。

    import fj.F;  
    import fj.data.Array;  
    import static fj.data.Array.array;
    import static fj.function.Strings.matches;
    
    public final class List_exists {  
      public static void main(final String[] args) { 
        final Array<String> a = array("Hello", "There", "how", "ARE", "yOU?");  
        final boolean b = a.exists(matches.f("^[a-z]*$"));  
        System.out.println(b); // true
      }  
    }
    
        3
  •  4
  •   Community Fabien Hure    7 年前

    据我所知,不,但阿帕奇 Commons Collections 有这样的东西: Predicate


    编辑 :对,正如评论中所指出的,Commons集合来自pre-generics世界,所以 Google Collections ( 更新 : Guava )现在似乎是一个更好的选择。不过,公地藏书值得一提,因为它是一个著名的图书馆,可以做到这一点,而且人们也知道 为什么? 不要使用它。:)

    我只是在阅读关于谷歌收藏的更多信息 nice interview 与它的主要开发人员,并希望引用一点专门处理“谷歌收藏vs.ApacheCommons收藏”的问题:

    你的方法有什么独特之处? 例如,它与 Apache Commons收藏?

    凯文:“好吧,感谢上帝为阿帕奇 平民。我们都会很糟糕的 没有这样的图书馆。那 说,遗憾的是,那个特定的项目 在前仿制药的世界里已经停滞了。 他们确实想采用仿制药,但是 他们认识到这将涉及 一个非常重要和不相容的 重写。到目前为止,似乎没有人 积极地推动这样的努力。AT 谷歌:我们一直在使用Java 5 从2005年春天开始在全公司范围内。 一个收藏库正在 没有活力是一个交易破坏者 我们,因为我们真的讨厌 编译器警告。我也是 关心的地方很多 阿帕奇的收藏品没有 符合 他们实现的JDK接口。”

    […]

    贾里德:“正如凯文所暗示的,我们的图书馆 我只知道图书馆 在JDK之外,用Java 5构建的 特征:泛型、枚举、协变 编写Java 5时返回类型等 代码,您需要一个集合库 充分利用了 语言。另外,我们把 努力打造图书馆 完整、坚固且符合 JDK集合类。我们的 集合类要多得多 最初是有限的,但我们逐渐 在过去两年中改进了它们。 因为所有的图书馆使用都在谷歌 源控制系统,我们已经 修改公共内容的灵活性 接口。开源项目 像Apache Commons收藏一样 有自由改变它 初始发布后的行为。 因为我们会失去这种灵活性 谷歌收藏库1.0是 释放,我们渴望得到 现在就反馈,这样我们可以得到东西 对。”