添加具有不同索引和大小的未在arraylist上重复的元素

时间:2019-01-17 15:39:56

标签: java arraylist

我有2个ArrayList

由2列组成的ArrayList用户:[2, 1, 2, 2] 2表示用户ID,而1 and 2是服务ID

ArrayList服务调用tmp由1列组成:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]

我想将arraylist用户的第二列与arraylist服务的每个元素进行比较,如果它们不同,则将用户ID和服务ID放在由2列组成的另一个数组中

我想要的结果是:

[2, 3, 2, 4, 2, 5, 2, 6, 2, 7, 2, 8, 2, 9, 2, 10, 2, 11, 2, 12, 2, 13, 2, 14, 2, 15, 2, 16, 2, 17, 2, 18, 2, 19, 2, 20, 2, 21, 2, 22, 2, 23, 2, 1, 2, 3, 2, 4, 2, 5, 2, 6, 2, 7, 2, 8, 2, 9, 2, 10, 2, 11, 2, 12, 2, 13, 2, 14, 2, 15, 2, 16, 2, 17, 2, 18, 2, 19, 2, 20, 2, 21, 2, 22, 2, 23]

我尝试但效果不佳

for(int i=0;i<users.size();i+=2)
            {
                for(int j=0;j<tmp.size();j++)
                {
                    if(users.get(i+1).equals(tmp.get(j)))
                    {

                    }
                    else
                    {
                        tmp2.add(users.get(i));
                        tmp2.add(tmp.get(j));
                    }
                }
            }

错误的输出:

[2, 2, 2, 3, 2, 4, 2, 5, 2, 6, 2, 7, 2, 8, 2, 9, 2, 10, 2, 11, 2, 12, 2, 13, 2, 14, 2, 15, 2, 16, 2, 17, 2, 18, 2, 19, 2, 20, 2, 21, 2, 22, 2, 23, 2, 1, 2, 3, 2, 4, 2, 5, 2, 6, 2, 7, 2, 8, 2, 9, 2, 10, 2, 11, 2, 12, 2, 13, 2, 14, 2, 15, 2, 16, 2, 17, 2, 18, 2, 19, 2, 20, 2, 21, 2, 22, 2, 23]

输出应从[2,3 .......]

开始

1 个答案:

答案 0 :(得分:0)

如果您要收集users数组中未显示的ID,则在外循环中迭代users是错误的:您甚至在查看第二个“记录”之前,就向tmp2添加了元素的users

您应该像这样交换它们:

for(int service : tmp) {
  boolean found = false;
  for(int i = 0; i < users.size(); i += 2) {
    if(users.get(i+1) == service) found = true;
  }

  if(!found) {
    for (int i...) { 
      tmp2.add(users.get(i));
      tmp2.add(service);
    }
  }
}

当然,拥有“ 2列”列表是一个坏习惯。考虑使用两个字段来制作User类。使用流将有助于创建更具可读性的代码。