No conozco ninguno, y francamente sería difícil hacerlo de una manera tan ordenada. El lado de enhebrar está bien; Java es perfectamente capaz cuando se trata de enhebrar ... pero por el momento, el lenguaje simplemente no admite las características adecuadas.
Una de las características de diseño de LINQ es que todo se basa en interfaces y luego los métodos de extensión se utilizan para agregar funcionalidad adicional. Eso permite que el código se lea con fluidez - imagínese si tuviera que escribir:
IObservable<int> = Observable.Select(
Observable.Where(
source, x => x.SomeCondition)
x => x.SomeProjection);
Ick. El método de extensión es mucho más elegante:
IObservable<int> = source.Where(x => x.SomeCondition)
.Select(x => x.SomeProjection);
ahora una versión de Java podría basarse en una clase base abstracta en su lugar, pero eso sería perder parte de la elegancia.
Próximas expresiones de lambda y conversiones de grupos de métodos: estas son realmente fundamentales para LINQ en general; el equivalente más cercano en Java (clases internas anónimas) son demasiado feos para usarse en cualquier lugar donde use una expresión lambda en C#.
Básicamente, una versión Java de Rx sería factible, pero no sería tan elegante como la versión C# - que es probablemente la razón por la que no se ha hecho hasta donde yo sé. Puede haber otras bibliotecas "controladas por asincronía" para Java, pero es poco probable que sean tan completas y ordenadas como Rx.
Es posible que los cambios en Java 7 harán esto más factible; por lo que yo sé, no se están introduciendo métodos de extensión, pero una clase base abstracta versión gustaría ser razonable si la sintaxis lambda termina siendo bien ...
Ok, gracias. Tal vez esto sea más factible en Java 7 con cierres. –
Ahora puede escribir esto en Java: IObservable = source.where (condition()). Select (selector()). ToArray(); Consulte github.com/nicholas22/jpropel-light –