将字符串数组转换为数组列表
Convert array of Strings to Array list
我有一个包含名称和 ID 的 String
数组,我需要将该 String
数组转换为 List
个对象。
这是我的代码:
private List<ObjectAttribute> getDtls(String newVal) {
ObjectAttribute object = new ObjectAttribute();
List<ObjectAttribute> objLst = new ArrayList<ObjectAttribute>();
String[] newImageVal = [step0005.jpg, 172B6846-0073-4E5B-B10A-DDD928994EA6, step0003.jpg, FBC8D143-2CD7-47E6-B323-31A0928A9338]
for (int i = 0; i <= newImageVal.length - 1; i++) {
object.setImageName(newImageVal[i]);
object.setImageId(newImageVal[++i]);
objLst.add(object);
}
return objLst;
}
但有一个问题,它总是 returns 只有 objList
中的最后一个值。任何人都可以更正此代码。
移动
ObjectAttribute object = new ObjectAttribute();
for 循环内部:
for (int i = 0; i <= newImageVal.length - 1; i++) {
ObjectAttribute object = new ObjectAttribute();
object.setImageName(newImageVal[i]);
object.setImageId(newImageVal[++i]);
objLst.add(object);
}
private List<ObjectAttribute> getDtls(String newVal) {
List<ObjectAttribute> objLst = new ArrayList<ObjectAttribute>();
String[] newImageVal = [step0005.jpg, 172B6846-0073-4E5B-B10A-DDD928994EA6, step0003.jpg, FBC8D143-2CD7-47E6-B323-31A0928A9338]
// String delimiter = ", ";
// newImageVal = newVal.split(delimiter);
for (int i = 0; i <= newImageVal.length - 1; i++) {
ObjectAttribute object = new ObjectAttribute();
object.setImageName(newImageVal[i]);
object.setImageId(newImageVal[++i]);
objLst.add(object);
}
return objLst;
}
或者您可以使用 streams
方式做这样的事情:
AtomicInteger ai = new AtomicInteger();
List<ObjectAttribute> objLst = Arrays.stream(newImageVal)
.map(img-> {
ObjectAttribute object = new ObjectAttribute();
object.setImageName(img);
object.setImageId(ai.getAndIncrement());
return obj;
}).collect(Collectors.toList())
你的问题的根本原因是,正如@StefanBeike 所写,你只在 for-loop 之前实例化对象一次,然后你只是继续重写它的属性。在 for-loop 中移动实例化(= new
的调用)修复了功能。
然而,除此之外,在 for-loop 主体内递增 for-loop 变量是一种非常糟糕的做法。因此,您模糊了您的意图,您将得到一个可读性较差、更难维护且更容易被以后的更改破坏的代码。
并且主要条件应该是 i < newImageVal.length-1
以安全地处理数组大小。 (要 100% 确定你没有得到 ArrayIndexOutOfBoundsException
。)
有多种更好的方法。
在for-loop中加2 "header":
for (int i = 0; i < newImageVal.length-1; i += 2) {
ObjectAttribute object = new ObjectAttribute();
object.setImageName(newImageVal[i]);
object.setImageId(newImageVal[i+1]);
objLst.add(object);
}
使用while-loop代替for-loop:
int i = 0;
while (i < newImageVal.length-1) {
ObjectAttribute object = new ObjectAttribute();
object.setImageName(newImageVal[i++]);
object.setImageId(newImageVal[i++]);
objLst.add(object);
}
我有一个包含名称和 ID 的 String
数组,我需要将该 String
数组转换为 List
个对象。
这是我的代码:
private List<ObjectAttribute> getDtls(String newVal) {
ObjectAttribute object = new ObjectAttribute();
List<ObjectAttribute> objLst = new ArrayList<ObjectAttribute>();
String[] newImageVal = [step0005.jpg, 172B6846-0073-4E5B-B10A-DDD928994EA6, step0003.jpg, FBC8D143-2CD7-47E6-B323-31A0928A9338]
for (int i = 0; i <= newImageVal.length - 1; i++) {
object.setImageName(newImageVal[i]);
object.setImageId(newImageVal[++i]);
objLst.add(object);
}
return objLst;
}
但有一个问题,它总是 returns 只有 objList
中的最后一个值。任何人都可以更正此代码。
移动
ObjectAttribute object = new ObjectAttribute();
for 循环内部:
for (int i = 0; i <= newImageVal.length - 1; i++) {
ObjectAttribute object = new ObjectAttribute();
object.setImageName(newImageVal[i]);
object.setImageId(newImageVal[++i]);
objLst.add(object);
}
private List<ObjectAttribute> getDtls(String newVal) {
List<ObjectAttribute> objLst = new ArrayList<ObjectAttribute>();
String[] newImageVal = [step0005.jpg, 172B6846-0073-4E5B-B10A-DDD928994EA6, step0003.jpg, FBC8D143-2CD7-47E6-B323-31A0928A9338]
// String delimiter = ", ";
// newImageVal = newVal.split(delimiter);
for (int i = 0; i <= newImageVal.length - 1; i++) {
ObjectAttribute object = new ObjectAttribute();
object.setImageName(newImageVal[i]);
object.setImageId(newImageVal[++i]);
objLst.add(object);
}
return objLst;
}
或者您可以使用 streams
方式做这样的事情:
AtomicInteger ai = new AtomicInteger();
List<ObjectAttribute> objLst = Arrays.stream(newImageVal)
.map(img-> {
ObjectAttribute object = new ObjectAttribute();
object.setImageName(img);
object.setImageId(ai.getAndIncrement());
return obj;
}).collect(Collectors.toList())
你的问题的根本原因是,正如@StefanBeike 所写,你只在 for-loop 之前实例化对象一次,然后你只是继续重写它的属性。在 for-loop 中移动实例化(= new
的调用)修复了功能。
然而,除此之外,在 for-loop 主体内递增 for-loop 变量是一种非常糟糕的做法。因此,您模糊了您的意图,您将得到一个可读性较差、更难维护且更容易被以后的更改破坏的代码。
并且主要条件应该是 i < newImageVal.length-1
以安全地处理数组大小。 (要 100% 确定你没有得到 ArrayIndexOutOfBoundsException
。)
有多种更好的方法。
在for-loop中加2 "header":
for (int i = 0; i < newImageVal.length-1; i += 2) {
ObjectAttribute object = new ObjectAttribute();
object.setImageName(newImageVal[i]);
object.setImageId(newImageVal[i+1]);
objLst.add(object);
}
使用while-loop代替for-loop:
int i = 0;
while (i < newImageVal.length-1) {
ObjectAttribute object = new ObjectAttribute();
object.setImageName(newImageVal[i++]);
object.setImageId(newImageVal[i++]);
objLst.add(object);
}