地図とorElseは異なるサブタイプを返します

Bdhar:

1を返す-私は2つの機能があります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());
}

しかし、私はこのエラーを取得します

エラー:(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();
}
Mureinik:

あなたは強制的にジェネリック型指定を使用することができますgetStringListとして扱われますCollection<String>

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

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=226855&siteId=1