Mapa y volver OrElse diferentes subtipos

Bdhar:

Tengo dos funciones - uno que regresan Set<String>y regresan otra List<String>.

private static List<String> getStringList(final String factor) {
    ....
}

private static Set<String> getStringSet() {
    ....
}

Ahora, tengo una función para devolver una Collection<String>que a su vez llama a las funciones anteriores en base a una determinada condición. Quiero hacer algo como esto:

private static Collection<String> getStringCollection() {
    Optional<String> factor = getFactor();
    return factor.filter(LambdaTest::someCondition)
            .map(LambdaTest::getStringList)
            .orElse(getStringSet());
}

Pero me sale este error

Error: (24, 37) java: tipos incompatibles: java.util.Set no se puede convertir a java.util.List

Puedo entender lo que está pasando aquí. Pero hay una manera de lograr algo similar sin hacer un elaborado instrucción if-else así?

private static Collection<String> getStringCollection() {
    Optional<String> factor = getFactor();

    if(factor.isPresent() && someCondition(factor.get())) {
        return getStringList(factor.get());
    }

    return getStringSet();
}
Mureinik:

Se podría utilizar una especificación de tipo genérico para obligar getStringLista ser tratado como un Collection<String>:

return factor.filter(LambdaTest::someCondition)
             .<Collection<String>> map(LambdaTest::getStringList)
             .orElse(getStringSet());

Supongo que te gusta

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