gpt4 book ai didi

java - Map 和 orElse 返回不同的子类型

转载 作者:搜寻专家 更新时间:2023-11-01 01:59:19 25 4
gpt4 key购买 nike

我有两个函数 - 一个返回 Set<String>和另一个返回 List<String> .

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

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

现在,我有一个返回 Collection<String> 的函数依次根据特定条件调用上述函数。我想做这样的事情:

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

但是我得到这个错误

Error:(24, 37) java: incompatible types: java.util.Set cannot be converted to 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();
}

最佳答案

您可以使用通用类型规范来强制 getStringList被视为 Collection<String> :

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

关于java - Map 和 orElse 返回不同的子类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56976804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com