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

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

用Java中的多個(gè)元素替換Collection的元素的最佳方法

用Java中的多個(gè)元素替換Collection的元素的最佳方法

一只萌萌小番薯 2021-05-07 14:13:53
我有一個(gè)字符串值集合。如果值之一是“ *”,我想用另外3個(gè)值代替,例如“ X”,“ Y”和“ Z”。換句話說,我想將[“ A”,“ B”,“ *”,“ C”]轉(zhuǎn)換為[“ A”,“ B”,“ X”,“ Y”,“ Z”,“ C”]。順序無關(guān)緊要,因此只需刪除其中一個(gè)并添加其他內(nèi)容即可。這些是我可以想到的使用示例的方式:Collection<String> additionalValues = Arrays.asList("X","Y","Z"); // or set or whateverif (attributes.contains("*")) {    attributes.remove("*");    attributes.addAll(additionalValues);}或者attributes.stream()          .flatMap(val -> "*".equals(val) ? additionalValues.stream() : Stream.of(val))          .collect(Collectors.toList());最有效的方法是什么?再說一次,順序并不重要,理想情況下,我想刪除重復(fù)項(xiàng)(所以可能是流中的distinct()或HashSet?)。
查看完整描述

3 回答

?
蝴蝶不菲

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

我認(rèn)為第二個(gè)更好。Arrays.asList("X","Y","Z")檢索ArrayList即數(shù)組。替換其中的值不是很好。


在一般情況下,如果您想修改一個(gè)集合(例如,*用X,Y和替換Z),請(qǐng)以某種方式創(chuàng)建新集合。


請(qǐng)查看LinkedList是否要修改集合本身。


使用流:


public static List<String> replace(Collection<String> attributes, String value, Collection<String> additionalValues) {

    return attributes.stream()

                     .map(val -> value.equals(val) ? additionalValues.stream() : Stream.of(val))

                     .flatMap(Function.identity())

                     .collect(Collectors.toList());

}

不使用流


public static List<String> replace(Collection<String> attributes, String value, Collection<String> additionalValues) {

    List<String> res = new LinkedList<>();


    for (String attribute : attributes) {

        if (value.equals(attribute))

            res.addAll(additionalValues);

        else

            res.add(attribute);

    }


    return res;

}

演示:


List<String> attributes = Arrays.asList("A", "B", "*", "C");

List<String> res = replace(attributes, "*", Arrays.asList("X", "Y", "Z"));  // ["A", "B", "X", "Y", "Z", "C"]



查看完整回答
反對(duì) 回復(fù) 2021-05-26
?
飲歌長嘯

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

我會(huì)以與您的第一種方式非常相似的方式進(jìn)行操作:

if (attributes.remove("*")) {
    attributes.addAll(additionalValues);
    }

你并不需要一個(gè)單獨(dú)的removecontains呼叫的正確實(shí)施的集合

Collection.remove(Object)]如果存在從此集合中刪除指定元素的單個(gè)實(shí)例(可選操作)。更正式地講,如果此集合包含一個(gè)或多個(gè)這樣的元素,則刪除這樣的元素e,使其(o == null?e == null:o.equals(e))。如果此集合包含指定的元素(或者等效地,如果此集合由于調(diào)用而更改),則返回true


查看完整回答
反對(duì) 回復(fù) 2021-05-26
  • 3 回答
  • 0 關(guān)注
  • 279 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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