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"]

TA貢獻(xiàn)1951條經(jīng)驗(yàn) 獲得超3個(gè)贊
我會(huì)以與您的第一種方式非常相似的方式進(jìn)行操作:
if (attributes.remove("*")) { attributes.addAll(additionalValues); }
你并不需要一個(gè)單獨(dú)的remove
和contains
呼叫的正確實(shí)施的集合:
[
Collection.remove(Object)
]如果存在,則從此集合中刪除指定元素的單個(gè)實(shí)例(可選操作)。更正式地講,如果此集合包含一個(gè)或多個(gè)這樣的元素,則刪除這樣的元素e,使其(o == null?e == null:o.equals(e))。如果此集合包含指定的元素(或者等效地,如果此集合由于調(diào)用而更改),則返回true。
添加回答
舉報(bào)