将元素添加到数组列表/Pojo

时间:2021-04-05 09:40:29

标签: java arrays arraylist core

我在向 Arraylist 添加元素时遇到问题。我创建了一个像我的数组列表一样的 POJO。

public class GroupUserMapping {
    String group;
    ArrayList<String> users;
//setters getters constructor
}

我有一个函数,我正在读取一个文本文件来获取我现在存储在组数组中的组,我需要遍历其他文本文件中的所有记录并获取所有具有该组映射的用户,并根据根据我的情况,我正在尝试将元素添加到 Pojo 数组列表中,如下所示:

 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();

问题是当我为 Group 阅读时说 G1 我有用户 u1,u2 并且这些映射正确存储在用户组中,但是当我搜索 Group G2 时的下一个循环我有用户 U2,U3。在第二个循环中,它还更新了第一组值。理想情况下,我的元素应该是 G1->U1,U2 和 G2-> U2,U3,但我的代码正在添加这样的元素。 G1->U2,U3 G2->U2,U3。我在这里做错了什么?请帮忙

1 个答案:

答案 0 :(得分:0)

users.clear(); 导致了问题。

在第一次迭代中,您将用户 1 和 2 添加到该列表中。然后在构造函数中传递这个列表。

GroupUserMapping groupUserMapping = new GroupUserMapping(group,users);

现在在第二次迭代中,您清除循环,然后添加用户 2 和 3。由于第一组引用了同一个列表,因此 G1 的用户列表也被清除,并添加了用户 2 和 3。

您需要将 users.clear(); 替换为

users = new ArrayList<String>();

在上面的例子中,数据没有改变,只有 users 变量现在指向不同的位置。因此G1的列表不会有任何变化。