我有两个类列表,即Database1的StuPersonal,不同大小的StuPersonal of Database2。
public List<StuPersonal> stpers(){
int size=0;
Session s=getmSession();
Transaction tx=s.beginTransaction();
List<StuPersonal> splM=new ArrayList();
Query q=s.createQuery("from StuPersonal");
splM=q.list();
tx.commit();
s.close();
return splM;
}
public List<StuPersonal> stpersl(){
int size=0;
List<StuPersonal> splL=new ArrayList();
Session s=getlSession();
Transaction tx=s.beginTransaction();
List<StuPersonal> spl=new ArrayList();
Query q=s.createQuery("from StuPersonal");
splL=q.list();
tx.commit();
s.close();
return splL;
}
现在我必须比较两个列表,并且需要获取第二个列表中未显示的项目。即某些对象不在第2类列表中,因此需要存储它们。我写的这段代码不能正常工作。请指教。
for(StuPersonal cl:sp)
{
for(StuPersonal cl2:sp2)
{
if(cl.getid().equals(cl2.getid()))
{
//i++;
break;
}
else
{
fun.updatelist(cl.getid());
break;
}
}
}
答案 0 :(得分:2)
您正在检查列表对象的ID而不是Class_1
对象ID
if(cl.getid() == cl2.getid())
{
//i++;
break;
} else
{
fun.updatelist(cl2.getid());
break;
}
你正在使用equals方法,考虑到id不长String
。
答案 1 :(得分:2)
您不是通过为变量和方法选择可怕的名称,不遵守标准命名约定,而是不正确地缩进代码来帮助自己。
无论如何,你应该尝试编写只做一件事的简短方法,它代表你任务中的步骤。您的任务是生成列表1中存在但在列表2中不存在的对象列表。此处“存在”表示“列表中存在具有相同ID的对象”。
首先编写方法isPresent()
:
/**
* Returns true if an object with the same ID as the ID of the given object is
* present in the given list
*/
private boolean isPresent(StuPersonal object, List<StuPersonal> list) {
for (StuPersonal candidate : list) {
if (candidate.getId().equals(object.getId()) {
return true;
}
}
return false;
}
现在您可以在算法中使用此方法:
// start with an empty list
List<StuPersonal result = new ArrayList<>();
// add every element of list1 unless it's present in list2
for (StuPersonal s : list1) {
if (!isPresent(s, list2)) {
result.add(s);
}
}
答案 2 :(得分:0)
以下是针对您的方案使用String的示例。
List<String> firstList = Arrays.asList("obj1", "obj2", "obj3");
List<String> secondList = Arrays.asList("obj1", "obj2", "obj3", "obj4", "obj5");
List<String> storedList = new ArrayList<String>();
for (String obj2 : secondList) {
if (!firstList.contains(obj2)) {
storedList.add(obj2);
}
}