【问题标题】:Java/Android best equivalent for C# linq [duplicate]C# linq 的 Java/Android 最佳等效项 [重复]
【发布时间】:2015-12-15 06:22:03
【问题描述】:

让我们看看这个示例 C# 代码:

List<int> numbers = new List<int>() { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
int numCount = numbers.Where(n => n < 3 || n > 7).Count();

我对 Java 中最接近的等价物很感兴趣,显然不需要编写花哨的 for/foreach 循环来迭代集合。

据我所知,Java 中没有确切的 linq equivalnet,但是我还是 Java 编程的初学者,有什么可以推荐给我的吗?我实际上正在寻找最紧凑和优雅的方式来在 Java 中实现相同的结果

[添加] 所以,谢谢大家的回复。但是,我需要在 Android 上使用它,但似乎我不能。有什么解决办法吗?

(对不起,它是重复的)

[添加] 有人试过这个吗? http://sourceforge.net/projects/streamsupport/

【问题讨论】:

  • @caesay 如果您向下滚动答案,您会发现Java 8 streams 将在这里完成工作
  • @Sybren:我就是答案之一。我建议一个重复的问题。这里的问题是“我如何根据谓词过滤数组”,这也是我发布的链接的问题。
  • @是的,答案也在您的链接中,但也在我的链接中,所以我不明白您为什么不同意我的副本。

标签: java c# android linq


【解决方案1】:

结合 Lambda 表达式的 Java 8 Streaming API 将完成这项工作:

    int[] numbers = new int[] { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
    long count = Arrays.stream(numbers).filter(n -> n < 3 || n > 7).count();

【讨论】:

  • 谢谢,我更新了我的问题。我在使用 Android,所以我迷路了吗?
  • 遗憾的是,在支持 Java 8 之前,它无法在 android 上运行。
【解决方案2】:

在 Java8 中:

Arrays.stream(numbers).filter(n -> n < 3 || n > 7).count();

针对您对 android 的要求,请查看 lambdaj:https://code.google.com/p/lambdaj/ 它与 android 兼容 - 尽管语法不同。您必须查看文档,因为我从未使用过它。您也可以查看https://github.com/wagnerandrade/coollection

【讨论】:

  • Lambdaj 看起来很有前途,它不像 C# linq 那样清晰,但总比没有
  • 我发现 Guava Collections + lambdas(或方法参考)是 Android 的最佳解决方案。不幸的是,Java 8 流 api 不是一个解决方案,因为它需要最少的 api Android 7。Guava 提供了类似的 api,但它也适用于任何 Android 版本。我无法回答我的问题,因为管理员已决定将其标记为重复
【解决方案3】:

使用Java8 流的工作方式非常相似:

int numcount = Arrays.stream(numbers).filter(n -> n < 3 || n > 7).count();

【讨论】:

    【解决方案4】:

    如果您需要 Java 7 或更早版本,请尝试 google 代码中提供的 lambdaj 库。如果不相同,它将提供类似的功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-03
      • 1970-01-01
      • 2012-05-04
      • 2017-04-04
      • 2012-05-14
      • 2013-12-15
      相关资源
      最近更新 更多