bdh*_*har 4 java lambda compiler-errors
我有两个功能-一个返回Set<String>,另一个返回List<String>。
private static List<String> getStringList(final String factor) {
....
}
private static Set<String> getStringSet() {
....
}
Run Code Online (Sandbox Code Playgroud)
现在,我有一个函数可以返回a Collection<String>,然后根据特定条件依次调用上述函数。我想做这样的事情:
private static Collection<String> getStringCollection() {
Optional<String> factor = getFactor();
return factor.filter(LambdaTest::someCondition)
.map(LambdaTest::getStringList)
.orElse(getStringSet());
}
Run Code Online (Sandbox Code Playgroud)
但是我得到这个错误
错误:(24,37)java:不兼容的类型:java.util.Set无法转换为java.util.List
我能理解这里发生了什么。但是,有没有一种方法可以完成类似的任务而无需执行类似的if-else语句呢?
private static Collection<String> getStringCollection() {
Optional<String> factor = getFactor();
if(factor.isPresent() && someCondition(factor.get())) {
return getStringList(factor.get());
}
return getStringSet();
}
Run Code Online (Sandbox Code Playgroud)
您可以使用通用类型规范来强制getStringList将其视为Collection<String>:
return factor.filter(LambdaTest::someCondition)
.<Collection<String>> map(LambdaTest::getStringList)
.orElse(getStringSet());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
45 次 |
| 最近记录: |