我需要一个解决方案来改变Java中多维ArrayList中元素的值。这是我的ArrayList: 公共类用户{
ArrayList<ValidateUser> personer = new ArrayList<ValidateUser>();
public Users() {
personer.add(new ValidateUser("admin", "asdf123", 0.8, "admin"));
personer.add(new ValidateUser("jesper", "ukamm19", 2.5, "user"));
personer.add(new ValidateUser("lars", "lol123", 1.5, "user"));
}
例如,我想更改用户“admin”的双精度值(0.8)。 这可以从另一个班级完成。 怎么做?
提前致谢! :)
答案 0 :(得分:1)
正如我在评论中所述,只需遍历列表即可找到对象。如果你要做很多事情,可以考虑使用地图。
for (ValidateUser user : personer)
if (user.getName().equals("admin"))
user.setNumber(someNumber);
答案 1 :(得分:1)
首先,请注意,这不是一个多维数组,只是一个包含ValidateUser
类对象引用元素的列表。其次,您需要在更新之前访问该元素。您有几种方法可以实现此目的:
在equals
课程中实施hashCode
和ValidateUser
方法,然后从列表中检索对象:
ValidateUser adminUser = personer.get(new ValidateUser("admin", "", 0.8, ""));
adminUser.set...
注意:这看起来很荒谬但会起作用(假设您的equals
方法仅按保留此"admin"
值的字段进行检查。
浏览数组并手动搜索所需元素,然后更新它:
for (ValidateUser user : personer) {
if ("admin".equals(user.getXxx()) {
user.set...
break; //don't forget this!
}
}
使用其他数据结构(如Map<String, ValidateUser>
)来存储数据并加快检索速度:
Map<String, ValidateUser> personerMap = new LinkedHashMap<String, ValidateUser>();
personerMap.add("admin", new ValidateUser("admin", ...);
//fill the map with other values...
//if you still want a Collection<ValidateUser> personer variable
Collection<ValidateUser> personer = personerMap.values();
//now check for the desired element
ValidateUser admin = personerMap.get("admin");
if (admin != null) {
admin.set...
}
通过评论,您的ValidateUser
是一个不可变对象,因此您无法使用setter更新其字段(因为没有)。因此,这里最好的方法是使用ListIterator<ValidateUser>
代替(不要与Iterator
混淆)并用修改后的对象替换元素。这是一个例子:
//the new immutable ValidateUser that will replace the older one...
//set the parameters as needed
ValidateUser newAdmin = new ValidateUser("admin", ...);
ListIterator<ValidateUser> listIterator = personer.listIterator();
while (listIterator.hasNext()) {
ValidateUser validateUser = listIterator.next();
if ("admin".equals(validateUser.getXxx()) {
listIterator.set(newAdmin);
break;
}
}