2 回答

TA贡献1829条经验 获得超6个赞
您可以使用通用类型规范来强制getStringList
将其视为Collection<String>
:
return factor.filter(LambdaTest::someCondition) .<Collection<String>> map(LambdaTest::getStringList) .orElse(getStringSet());

TA贡献1821条经验 获得超6个赞
不确定这是否明显并在问题的后半部分说明,但您还可以做的是更改方法的签名getStringList以返回 a Collection<String>,保持其实现与之前相同。
这样完整的实现看起来像:
Collection<String> getStringList(final String factor) { ... }
Set<String> getStringSet() { ... }
private Collection<String> getStringCollection() {
Optional<String> factor = getFactor();
return factor.filter(this::someCondition)
.map(this::getStringList)
.orElseGet(this::getStringSet);
}
另一种选择是初始化SetinorElse以返回Listusing new ArrayList<>:
private Collection<String> getStringCollection() {
Optional<String> factor = getFactor();
return factor.filter(this::someCondition)
.map(this::getStringList)
.orElse(new ArrayList<>(getStringSet()));
}
添加回答
举报