2013-12-07 7 views
-3

У меня есть 2 списка классов, а именно StuPersonal из Database1, StuPersonal 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; 

    } 

Теперь я должен сравнить оба списка и должны взять предметы, которые не находятся в представленный во втором list.i.e некоторые объекты не в классе 2 списка поэтому он должен быть сохранен. Я написал этот код, который работает неправильно. Пожалуйста посоветуй.

for(StuPersonal cl:sp) 

{ 
for(StuPersonal cl2:sp2) 
     { 

      if(cl.getid().equals(cl2.getid())) 
      { 
       //i++; 
       break; 
      } 
      else 
      { 
      fun.updatelist(cl.getid()); 
      break; 
      } 

     }   
} 
+3

Это не кажется, вообще ничего делать с MySQL или Hibernate. Не добавляйте к вашим вопросам несвязанные теги. –

+1

И, пожалуйста, напишите код, который, по крайней мере, компилируется. –

ответ

2

Вы Проверка идентификатора объекта List не Id Class_1 Object

if(cl.getid() == cl2.getid()) 
      { 
       //i++; 
       break; 
      } else 
     { 
     fun.updatelist(cl2.getid()); 
     break; 
     } 

И вы используете метод Equals, учитывая идентификатор, пока не String.

0

Вот пример со строкой для вашего сценария.

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); 
     } 
    } 
2

Вы не помогаете себе, выбирая ужасные имена для переменных и методов, не соблюдая стандартные соглашения об именах, а не правильно отступы код.

В любом случае, вы должны попытаться написать короткие методы, которые делают только одну вещь и представляют собой шаги в вашей задаче. Ваша задача - создать список объектов, присутствующих в списке1, но не присутствующих в списке 2. И «присутствовать» здесь означает «объект с тем же идентификатором существует в списке».

Так начать писать метод 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); 
    } 
} 
+0

спасибо, сэр, его работа ... Я изменил код в соответствии с моим классом, и я улучшу то, что вы сказали выше. Большое вам спасибо за ваше руководство. –

Смежные вопросы