El uso genérico de predicados y función en un método

Aron:

Soy bastante nuevo a los genéricos aquí y me gustaría un poco de ayuda.

Estoy intentando crear un método genérico con un genérico Predicate, un genérico java.util Function, un genérico Listcomo argumentos. El método es la siguiente:

public static <T> T getValue(Predicate<? super Object> condition, Function<? super Object, ? extends Object> mapper, T elseResult, List<T> table) {
        T result = null;
        if (table != null)
            result = table.stream()
                    .filter(condition)
                    .map(mapper).findAny().orElse(elseResult); // Syntax error here.
        else
            result = elseResult;

        return (T) result;
    }

Recibo un error en el orElse(elseResult)método. Este es el error -

The method orElse(capture#1-of ? extends Object) in the type Optional<capture#1-of ? extends Object> is not applicable for the arguments (T).

No estoy exactamente seguro de lo que este error se trata. Entonces, ¿podría alguien decirme lo que estoy haciendo mal aquí? Gracias.

Eran :

Su mapperpuede devolver nada, por lo que su orElsemétodo no necesariamente devolver una T.

Si cambia de mappera Function<T,T> mapper, su código pasará compilación.

Si desea que su mapeador para poder devolver un tipo diferente, añadir un segundo argumento de tipo:

public static <T,S> S getValue(Predicate<? super Object> condition, Function<T,S> mapper, S elseResult, List<T> table) {
    S result = null;
    if (table != null)
        result = table.stream()
                .filter(condition)
                .map(mapper).findAny().orElse(elseResult);
    else
        result = elseResult;

    return result;
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=345219&siteId=1
Recomendado
Clasificación