第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

Map 和 orElse 返回不同的子類型

Map 和 orElse 返回不同的子類型

慕容3067478 2023-03-17 15:05:07
我有兩個(gè)功能 - 一個(gè)返回Set<String>,另一個(gè)返回List<String>。private static List<String> getStringList(final String factor) {    ....}private static Set<String> getStringSet() {    ....}現(xiàn)在,我有一個(gè)返回 a 的函數(shù)Collection<String>,它會根據(jù)特定條件依次調(diào)用上述函數(shù)。我想做這樣的事情:private static Collection<String> getStringCollection() {    Optional<String> factor = getFactor();    return factor.filter(LambdaTest::someCondition)            .map(LambdaTest::getStringList)            .orElse(getStringSet());}但我得到這個(gè)錯(cuò)誤錯(cuò)誤:(24, 37) java: 類型不兼容:java.util.Set 無法轉(zhuǎn)換為 java.util.List我能理解這里發(fā)生了什么。但是,有沒有一種方法可以在不進(jìn)行像這樣精心設(shè)計(jì)的 if-else 語句的情況下實(shí)現(xiàn)類似的效果呢?private static Collection<String> getStringCollection() {    Optional<String> factor = getFactor();    if(factor.isPresent() && someCondition(factor.get())) {        return getStringList(factor.get());    }    return getStringSet();}
查看完整描述

2 回答

?
肥皂起泡泡

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超6個(gè)贊

您可以使用通用類型規(guī)范來強(qiáng)制getStringList將其視為Collection<String>

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


查看完整回答
反對 回復(fù) 2023-03-17
?
達(dá)令說

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超6個(gè)贊

不確定這是否明顯并在問題的后半部分說明,但您還可以做的是更改方法的簽名getStringList以返回 a Collection<String>,保持其實(shí)現(xiàn)與之前相同。


這樣完整的實(shí)現(xiàn)看起來像:


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()));

}


查看完整回答
反對 回復(fù) 2023-03-17
  • 2 回答
  • 0 關(guān)注
  • 103 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號