Посоветуйте что нибудь чтобы хорошо разобраться в лямбда выражениях. А то столкнулся с задачей и не до конца понимаю логику построения public static <T, U> Function<T, U> ternaryOperator( Predicate<? super T> condition, Function<? super T, ? extends U> ifTrue, Function<? super T, ? extends U> ifFalse) { return x -> condition.test(x) ? ifTrue.apply(x) : ifFalse.apply(x); // your implementation here } \ Особенно откуда берется параметр x. Я понимаю что он должен быть типа T. но все равно не ложится в голову откуда он взялся)) И почему именно такая конструкция <? super T, ? extends U>. В общем беда)