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 getStringList
a ser tratado como un Collection<String>
:
return factor.filter(LambdaTest::someCondition)
.<Collection<String>> map(LambdaTest::getStringList)
.orElse(getStringSet());