C# - pattern matching - many discards
да вроде то же самое есть
<code> private static Function<Integer, Integer> multiply = x -> x * 2; private static Function<Integer, Integer> add = x -> x + 2; private static Function<Integer, Unit> logOutput = x -> { logger.info("Data:" + x); return Unit.unit(); }; public static Unit execute(Integer input) { Function<Integer, Unit> pipeline = multiply .andThen(add) .andThen(logOutput); return pipeline.apply(input); } </code>
Это больше похоже на Select и SelectMany - просто пачка расширяющих методов с делегатами в качестве параметров, применяемых ко входным данным и результатам. А я спросил про деревья выражений - сериализация делегатов и функций, представление их в виде данных.
Вобщем, я поискал - нет такого в Джаве из коробки. Есть какие-то сторонние либы, разрабатываемые энтузиастами, типа JaQue. Это не сравнимо с Дотнетом и Шарпом, где подобные фичи разрабатываются, внедряются во фреймворк и поддерживаются на системном уровне самой компанией-разработчиком языка и фреймворка. В Дажве и большинстве других языков без крупного хозяина всегда такие проблемы - их экосистемы представляют из себя конструктор "сделай сам" - т.е. практически отсутствуют. Надо писать под десктоп? - Ищи гуёвую либу под Джаву. Надо под веб? - Ищи гуёвую либу для веба. Надо трёхмерную графику? - Ищи джавовый движок. И вот часто у Джавы и других языков либо нет нифига для этого, либо что-то стороннее, с поддержкой мелкой фирмочки или вообще тремя с половиной энтузиастами. Хочешь комплексное решение "всё из коробки, подогнанное"? - Иди к Майкрософт. Да, у них есть проблемы. Но у других их ещё больше. Что-то подобное есть лишь у Эппл. Но хуже, мельче, меньший охват (нет своей СУБД, например), и нужно менять ориентацию (в переносном смысле).