C# linq 的 Java/Android 最佳等效项 [重复]
Posted
技术标签:
【中文标题】C# linq 的 Java/Android 最佳等效项 [重复]【英文标题】:Java/Android best equivalent for C# linq [duplicate] 【发布时间】: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:我就是答案之一。我建议一个重复的问题。这里的问题是“我如何根据谓词过滤数组”,这也是我发布的链接的问题。
@是的,答案也在您的链接中,但也在我的链接中,所以我不明白您为什么不同意我的副本。
【参考方案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 库。如果不相同,它将提供类似的功能。
【讨论】:
以上是关于C# linq 的 Java/Android 最佳等效项 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
在实体中查找对象和加载实体、Foreach 或在哪里使用 LinQ ON C# 的最佳性能?
使用带有 Linq to Sql 的 Sql Server 唯一标识符/更新日期列 - 最佳方法