3 回答
TA贡献1810条经验 获得超4个赞
我认为第二个更好。Arrays.asList("X","Y","Z")检索ArrayList即数组。替换其中的值不是很好。
在一般情况下,如果您想修改一个集合(例如,*用X,Y和替换Z),请以某种方式创建新集合。
请查看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贡献1951条经验 获得超3个赞
我会以与您的第一种方式非常相似的方式进行操作:
if (attributes.remove("*")) { attributes.addAll(additionalValues); }
你并不需要一个单独的remove
和contains
呼叫的正确实施的集合:
[
Collection.remove(Object)
]如果存在,则从此集合中删除指定元素的单个实例(可选操作)。更正式地讲,如果此集合包含一个或多个这样的元素,则删除这样的元素e,使其(o == null?e == null:o.equals(e))。如果此集合包含指定的元素(或者等效地,如果此集合由于调用而更改),则返回true。
添加回答
举报