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

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

將枚舉的 ArrayList 轉(zhuǎn)換為字符串

將枚舉的 ArrayList 轉(zhuǎn)換為字符串

偶然的你 2021-11-24 15:15:20
我有以下enums,可以填充一個(gè)ArrayList:public enum RewardType {    POINTS, MONEY, TOKENS, RANDOM;}和public enum OfferType {    GIFT, DISCOUNT, LOTTERY;}要轉(zhuǎn)換ArrayList為String我使用此方法:public static String arrayListToString(ArrayList<Enum> arrayList) {    String finalString = "";    for (int i = 0; i < arrayList.size(); i++) {        if (TextUtils.isEmpty(finalString)) {            finalString = arrayList.get(i).name();        } else {            finalString = finalString + ", " + arrayList.get(i).name();        }    }    return finalString;}然后我這樣稱呼它:String rewardType = arrayListToString(mainModel.getRewardTypes()); //getRewardTypes returns an ArrayList<RewardType>問(wèn)題是,它arrayListToString是ArrayList<Enum>用ArrayList<enum>參數(shù)調(diào)用的,不能用參數(shù)調(diào)用(這是我的類(lèi)的類(lèi)型)。我也無(wú)法創(chuàng)建一個(gè) type 的類(lèi)Enum。由于enum!= Enum,我如何使arrayListToString方法與我的enum類(lèi)一起工作?
查看完整描述

3 回答

?
天涯盡頭無(wú)女友

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

由于 anenum X隱式是 的子類(lèi)Enum<X>,請(qǐng)將方法聲明更改為:


public static String arrayListToString(ArrayList<? extends Enum> arrayList)

然而,為什么要這樣做呢?


在toString()一個(gè)枚舉返回name()默認(rèn)狀態(tài)下,所以你不需要調(diào)用name(),這意味著你真的不關(guān)心什么是在列表中了,所以這更普遍有用的方法也可以工作:


public static String listToString(List<?> list) {

    StringBuilder buf = new StringBuilder();

    boolean first = true;

    for (Object value : list) {

        if (first)

            first = false;

        else

            buf.append(", ");

        buf.append(value);

    }

    return buf.toString();

}

它甚至可以比這更簡(jiǎn)單:


public static String toString(Iterable<?> iterable) {

    StringJoiner joiner = new StringJoiner(", ");

    for (Object value : iterable)

        joiner.add(String.valueOf(value));

    return joiner.toString();

}

或者使用 Java 8+ 流:


public static String toString(Collection<?> coll) {

    return coll.stream().map(Object::toString).collect(Collectors.joining(", "));

}


查看完整回答
反對(duì) 回復(fù) 2021-11-24
?
人到中年有點(diǎn)甜

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

更改簽名arrayListToString()從此:

public static String arrayListToString(ArrayList<Enum> arrayList)

對(duì)此:

public static String arrayListToString(ArrayList<? extends Enum> arrayList)

在該劇的核心理念是,List<Integer>不是一個(gè)List<Number>,即使一個(gè)Integer是一個(gè)Number。這是有道理的,因?yàn)槟梢詫?aDouble放入 aList<Number>但不能將 aDouble放入 a List<Integer>。

同樣,aList<RewardType>不是 a List<Enum>,即使 aRewardTypeEnum

但是,AList<RewardType> List<? extends Enum>。這是因?yàn)槲覀儸F(xiàn)在說(shuō)列表是某種枚舉的列表,而不是任何枚舉的列表。


查看完整回答
反對(duì) 回復(fù) 2021-11-24
?
搖曳的薔薇

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

正如 Ben 所提到的,您應(yīng)該使用類(lèi)型泛型來(lái)正確評(píng)估類(lèi)型。


除此之外,您的方法略有未優(yōu)化??紤]使用StringBuilder以防止創(chuàng)建垃圾String對(duì)象,并刪除isEmpty循環(huán)內(nèi)的冗余檢查:


public static <T extends Enum<?>> String enumListToString(List<T> list){

    if(list.size() < 1)

        return "";

    StringBuilder sb = new StringBuilder();

    sb.append(list.get(0).name());

    for (int i = 1; i < list.size(); i++) {

        sb.append(", ").append(list.get(i));

    }

    return sb.toString();

}


查看完整回答
反對(duì) 回復(fù) 2021-11-24
  • 3 回答
  • 0 關(guān)注
  • 155 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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