Java的反应性扩展

Tim*_*per 11 .net java linq system.reactive

是否有相当于Java 的Reactive Extensions(.NET)?

关于Rx(Reactive Extensions)

Rx是一个使用可观察集合组成异步和基于事件的程序的库.

我知道规则引擎,比如来自JBOSS的Drools,但还有其他一些更接近Microsoft .NET方法的方法吗?

bru*_*cet 18

根据这篇NetFlix博客文章,他们已将Rx移植到Java.它似乎还没有,但它们确实有发布这些内部开发的工具作为开源的历史,所以我希望它最终会被发布.

  • Netflix的RxJava现在可以在https://github.com/Netflix/RxJava上找到 (11认同)

Jon*_*eet 11

我不知道一个 - 坦率地说,这样一个整洁的方式很难做到.穿线方面很好; Java在线程方面非常强大......但目前,该语言并不支持适当的功能.

LINQ的一个简洁的设计特性是一切都基于接口,然后扩展方法用于添加额外的功能.这允许代码流畅地阅读 - 想象一下你是否必须写:

IObservable<int> = Observable.Select(
                       Observable.Where(
                           source, x => x.SomeCondition)
                       x => x.SomeProjection);
Run Code Online (Sandbox Code Playgroud)

伊克.扩展方法更优雅:

IObservable<int> = source.Where(x => x.SomeCondition)
                         .Select(x => x.SomeProjection);
Run Code Online (Sandbox Code Playgroud)

现在Java版本可能基于抽象基类,但这会失去一些优雅.

接下来是lambda表达式和方法组转换 - 这些通常是LINQ的基础; Java中最接近的等价物(匿名内部类)太难看了,无法在C#中使用lambda表达式的任何地方使用它.

基本上,Java版本的Rx是可行的,但它不会像C#版本那样优雅 - 这可能就是为什么我没有意识到这一点.Java可能还有其他"异步驱动"的库,但它们不太可能像Rx一样全面和整洁.

这是可能的,在Java 7中的变化将使这个更加可行; 据我所知,扩展方法没有被引入,但如果lambda语法最终没问题,抽象基类版本是合理的...

  • 您现在可以用Java编写:IObservable <Integer> = source.where(condition()).select(selector()).toArray(); 见github.com/nicholas22/jpropel-light (2认同)