Товарищи вот чего спрошу. В джаве разработчики по неосмотрительности оставили инференцию типов дженериков и типов параметров лямбд. В итоге, получается что можно писать так что бойлерплейта типа var и Borsch borsch = new Borsch(); и Borsch.newBuilder().addSmetana().build(); писать не нужно, если использовать тип Function для почти всего с пачкой функций-комбинаторов. Если обмазать это немутабельными коллекциями то будет совсем красиво(ну, с моей точки зрения). Вот, а насколько в разрез это пойдет с идиоматичной джавой?