Java 8 如何使用Java7或更早版本实现Java8流API?
我在一次求职面试中被问到这个问题(微软)。Java 8 如何使用Java7或更早版本实现Java8流API?,java-8,java-stream,Java 8,Java Stream,我在一次求职面试中被问到这个问题(微软)。 要实现的方法,例如: .stream()、.filter()、.map()、flatMap()、min()、count()、reduce()、groupBy() 等 这是一个相当开放的问题,但我认为是一个有趣的问题 感谢在Java7和Java6项目中使用StreamAPI的一种方法是添加streamsupport库streamsupport是Java 8 Java.util.function(函数接口)和Java.util.stream(流)的后端口J
要实现的方法,例如:
.stream()、.filter()、.map()、flatMap()、min()、count()、reduce()、groupBy()
等 这是一个相当开放的问题,但我认为是一个有趣的问题
感谢在Java7和Java6项目中使用StreamAPI的一种方法是添加streamsupport库streamsupport是Java 8 Java.util.function(函数接口)和Java.util.stream(流)的后端口Java 6或Java 7用户的API我不会浪费时间自己创建这些函数,因为它也意味着相当严格的测试。我宁愿使用。它适用于从6开始的任何Java,并具有所有这些特性(包括lambdas)以及许多其他特性。此外,它还提供了与核心Java相当好的兼容性,部分解决了泛型实现的缺陷。这里是一个很好的示例:。它几乎通过迭代器实现了Android/Java 7的所有流API。自己实现?嗯,
过滤器
,映射
,最小值
。。。可能是groupBy
可以实现得相当简单,我的意思是guava
在java-8之前就已经实现了。我所说的“琐碎”是指对于面试答案来说已经足够琐碎了。我猜它可以用同样的方式实现,只是没有lambdas,这将是一个巨大的混乱,也不是真正的可读性,但它本来是可以实现的done@Lino为什么那会是一片混乱?我使用guava在jdk-7项目中工作,在流操作不是一个简单的任务时,这非常正常option@Eugene是的,确切地说,冗长是我试图解释的:)我们这样做是为了一个项目,它工作得很合理,即使它不能与Java8语法竞争。但是,您可以基于泛型、反射和代码生成预先构建现有函数或工厂,例如方法(“isEmpty”)。asPredicate(String.class)
;不像String::isEmpty
那样简洁,但仍然比使用匿名内部类实现谓词
要短。但这不是问题所在;问题是“如何实现流API”,答案是,就像任何其他接口一样,不是吗?