for (int i=0;i<list.size();i++){
Sku_make_up sku_make_up=new Sku_make_up();
sku_make_up.setSumspsdsb(list.get(i).getSpspend()+list.get(i).getSbspend()+list.get(i).getSdspend());
list.set(i,sku_make_up);
}
我想修改list里边某一个值,这样改过之后其他值都为NULL了,请问怎么应该怎么修改某一个值
你这循环不是把所有的都改掉了么?直接通过下标修改就行了
int i=3;
Sku_make_up sku_make_up = new Sku_make_up();
sku_make_up.setSumspsdsb(list.get(i).getSpspend() + list.get(i).getSbspend() + list.get(i).getSdspend());
list.set(i, sku_make_up);
把下面这个对象改成list(i)
new了一个空对象:
Sku_make_up sku_make_up=new Sku_make_up();
然后只给这个属性赋值:
sku_make_up.setSumspsdsb()
其他不为空 就见鬼了;
Sku_make_up sku_make_up=new Sku_make_up();
替换成
Sku_make_up sku_make_up = list.get(i);
你到底要修改哪一个啊?你得在循环里判断哪个时你要修改的,然后再修改啊
List也是我们最常用的集合之一了,当list为空时,查看如下测试代码
getList
方法获取list
并计算大小
@Test
void testListNull(){
List<String> list = null;
getList(list);
}
private void getList(List<String> list){
list.size();
}
测试结果:
结果分析:
可见list
入参如果没有做null
的判断处理,也有空指针异常的风险,因此测试中也是我们需要关注的点。
我可以使用以下几种方案之一来修改list中的某个值,并将其他值变为NULL:
1.使用jdk8及以上的方法,用list.removeIf(Objects::isNull)来删除所有为null的元素,然后将需要修改的值添加到list中。
Example:
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add(null);
list.add("d");
System.out.println(list);
list.removeIf(Objects::isNull);
list.set(1, "newVal");
list.replaceAll(s -> null);
System.out.println(list);
输出的结果会是:
[a, b, c, null, d]
[a, newVal, null]
2.使用apache common包中的CollectionUtils.filter(list, PredicateUtils.notNullPredicate())方法来过滤掉为null的元素,然后将需要修改的值添加到list中。
3.使用谷歌guva库中的Iterables.filter(list, Predicates.notNull())方法来过滤掉为null的元素,然后将需要修改的值添加到list中。
4.使用循环来遍历list中的元素,将需要修改的值设置为list中对应元素的值,然后将其他值设为null。
注意:在处理list和map操作时,一定要先进行null处理,即判断list是否被初始化,或使用空判断方法来过滤null值。