public static final <T,R> Function<T,R> ifNotNullAndTrueThenElse(
            final Type<T> targetType, 
            final IFunction<? super T, Boolean> condition, final IFunction<? super T,R> thenFunction, final IFunction<? super T,R> elseFunction) {
        return ifTrueThenElse(targetType, FnBoolean.and(FnObject.isNotNull(),condition), thenFunction, elseFunction);
    }
public static final < T , R > Function < T , R > ifNotNullAndTrueThenElse ( final Type < T > targetType , final IFunction < ? super T , Boolean > condition , final IFunction < ? super T , R > thenFunction , final IFunction < ? super T , R > elseFunction ) { return ifTrueThenElse ( targetType , FnBoolean . and ( FnObject . isNotNull ( ) , condition ) , thenFunction , elseFunction ) ; }
<p>
Builds a function that will execute the specified function <tt>thenFunction</tt>
only if the target object is not null and the result of executing <tt>condition</tt>
on the target object is true, and will execute the specified function
<tt>elseFunction</tt> otherwise.
</p>
<p>
The built function can effectively change the target type (receive <tt>T</tt> and
return <tt>R</tt>) if both <tt>thenFunction</tt> and <tt>elseFunction</tt> return
the same type, and this is different than the target type <tt>T</tt>.
</p>

@param targetType the target type
@param condition the condition to be executed on the target object
@param thenFunction the function to be executed on the target object if
target is not null and the result of executing condition on it is true
@param elseFunction the function to be executed on the target object otherwise
@return a function that executes the "thenFunction" if target is not null and "condition" is true, and "elseFunction" otherwise.