Я не знаю одного - и, честно говоря, было бы трудно сделать таким аккуратным способом. Сторона резьбы хорошо; Java отлично работает, когда дело доходит до потоковой передачи ... но на данный момент язык просто не поддерживает соответствующие функции.
Одна из опрятных конструктивных особенностей LINQ заключается в том, что все основано на интерфейсах, а затем методы расширения используются для добавления дополнительных функций. Это позволяет свободно читать код - представьте, если бы вам пришлось написать:
IObservable<int> = Observable.Select(
Observable.Where(
source, x => x.SomeCondition)
x => x.SomeProjection);
Ick. Метод расширения гораздо более изящным:
IObservable<int> = source.Where(x => x.SomeCondition)
.Select(x => x.SomeProjection);
Теперь Java версия может быть основано на абстрактном базовом классе вместо этого, но потеряет часть элегантности.
Далее следуют лямбда-выражения и преобразования групп методов - они действительно являются фундаментальными для LINQ в целом; самый близкий эквивалент в Java (анонимные внутренние классы) слишком уродливы, чтобы их можно было использовать везде, где вы использовали бы лямбда-выражение в C#.
В принципе, Java-версия Rx была бы осуществимой, но она не была бы столь же изящной, как версия C#, и, вероятно, поэтому она не была выполнена, насколько мне известно. Для Java могут быть другие библиотеки, основанные на «асинхронности», но они вряд ли будут такими же всеобъемлющими и опрятными, как Rx.
Это возможно, что изменения в Java 7 сделают это более осуществимым; насколько я знаю, методы расширения не введены, но абстрактный базовый класс версия бы быть разумным, если синтаксис лямбда заканчивает тем, что все в порядке ...
Хорошо, спасибо. Возможно, это более возможно в Java 7 с закрытием. –
Теперь вы можете написать это в Java: IObservable = source.where (condition()). Select (selector()). ToArray(); См. Github.com/nicholas22/jpropel-light –