向数组添加元素 list/Pojo
Adding elements to a array list/Pojo
我在向 Arraylist 添加元素时遇到问题。我创建了一个 POJO,就像我的数组列表一样。
public class GroupUserMapping {
String group;
ArrayList<String> users;
//setters getters constructor
}
我有一个功能,我正在读取一个文本文件来获取我现在存储在组数组中的组,对于那些我需要循环遍历其他文本文件中的所有记录并获得具有该组映射的所有用户根据我的情况,我正在尝试将元素添加到 Pojo arraylist,如下所示:
ArrayList<GroupUserMapping> usergroups = new ArrayList< GroupUserMapping >();
ArrayList<String> users = new ArrayList<>();
ArrayList<String> groups = getGroups();// This used for lopping I have certain groups.
Scanner s = null;
String group="";
for(int i= 0;i<groups.size();i++ ){
s = new Scanner(new File(getClass().getClassLoader().getResource(mappingFile).getFile()));
s.useDelimiter("\r\n");
group=groups.get(i);
users.clear();
while (s.hasNext()) {
String aLine = s.next();
String[] value = aLine.split(":");
if(group.equalsIgnoreCase(value[0]))
{
LOGGER.info(group+":"+value[1]);
users.add(value[1]);
}
}
GroupUserMapping groupUserMapping = new GroupUserMapping(group,users);
usergroups.add(groupUserMapping);
s.close();
问题是当我阅读 G1 组时,我有用户 u1、u2,并且这些映射正确存储在用户组中,但是当我搜索 G2 组时,下一个循环我有用户 U2、U3。在第二个循环中,它也在更新第一组值。理想情况下,我的元素应该是 G1->U1,U2 和 G2->U2,U3,但我的代码正在添加这样的元素。 G1->U2,U3 G2->U2,U3。我在这里做错了什么?请帮忙
第 users.clear();
行导致了问题。
在第一次迭代中,您将用户 1 和 2 添加到该列表中。然后在构造函数中传递此列表。
GroupUserMapping groupUserMapping = new GroupUserMapping(group,users);
现在在第二次迭代中,您清除循环,然后添加用户 2 和 3。由于第一组引用了同一列表,因此 G1 的用户列表也被清除并添加了用户 2 和 3。
您需要将 users.clear();
替换为
users = new ArrayList<String>();
在上面的例子中,数据没有改变,只是 users
变量现在指向不同的位置。因此G1的名单不会有任何变化。
我在向 Arraylist 添加元素时遇到问题。我创建了一个 POJO,就像我的数组列表一样。
public class GroupUserMapping {
String group;
ArrayList<String> users;
//setters getters constructor
}
我有一个功能,我正在读取一个文本文件来获取我现在存储在组数组中的组,对于那些我需要循环遍历其他文本文件中的所有记录并获得具有该组映射的所有用户根据我的情况,我正在尝试将元素添加到 Pojo arraylist,如下所示:
ArrayList<GroupUserMapping> usergroups = new ArrayList< GroupUserMapping >();
ArrayList<String> users = new ArrayList<>();
ArrayList<String> groups = getGroups();// This used for lopping I have certain groups.
Scanner s = null;
String group="";
for(int i= 0;i<groups.size();i++ ){
s = new Scanner(new File(getClass().getClassLoader().getResource(mappingFile).getFile()));
s.useDelimiter("\r\n");
group=groups.get(i);
users.clear();
while (s.hasNext()) {
String aLine = s.next();
String[] value = aLine.split(":");
if(group.equalsIgnoreCase(value[0]))
{
LOGGER.info(group+":"+value[1]);
users.add(value[1]);
}
}
GroupUserMapping groupUserMapping = new GroupUserMapping(group,users);
usergroups.add(groupUserMapping);
s.close();
问题是当我阅读 G1 组时,我有用户 u1、u2,并且这些映射正确存储在用户组中,但是当我搜索 G2 组时,下一个循环我有用户 U2、U3。在第二个循环中,它也在更新第一组值。理想情况下,我的元素应该是 G1->U1,U2 和 G2->U2,U3,但我的代码正在添加这样的元素。 G1->U2,U3 G2->U2,U3。我在这里做错了什么?请帮忙
第 users.clear();
行导致了问题。
在第一次迭代中,您将用户 1 和 2 添加到该列表中。然后在构造函数中传递此列表。
GroupUserMapping groupUserMapping = new GroupUserMapping(group,users);
现在在第二次迭代中,您清除循环,然后添加用户 2 和 3。由于第一组引用了同一列表,因此 G1 的用户列表也被清除并添加了用户 2 和 3。
您需要将 users.clear();
替换为
users = new ArrayList<String>();
在上面的例子中,数据没有改变,只是 users
变量现在指向不同的位置。因此G1的名单不会有任何变化。