我有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 .......]
答案 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
类。使用流将有助于创建更具可读性的代码。