Java / Android最适合C#linq

Java/Android best equivalent for C# linq

本问题已经有最佳答案,请猛点这里访问。

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

1
2
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中的CeleSestEnter设置,显然不需要编写华丽的/Frach循环来迭代集合。

据我所知,Java中没有精确的LINQ等效网络,但是我还是Java编程入门,有什么可以推荐给我的吗?我实际上在爪哇寻找最紧凑和优雅的方式来达到同样的效果。

[增加]所以,谢谢所有的回复。不过,我需要在Android上使用它,但似乎不行。有没有解决方案?

(对不起,是重复的)

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


在Java8中:

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

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


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


Java 8流式API与lambda表达式相结合将完成这项工作:

1
2
    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();


使用Java8流的工作原理非常类似:

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