2013-07-06 4 views
3
List<String[]> sarray; 
    ArrayList<ContentTable> currentData=new ArrayList<ContentTable>(); 

    //here sarray is initialized with data 
    sarray = reader.readAll(); 


    for(String[] arr : sarray) 
     { 
      System.out.println("array data "+ Arrays.toString(arr)); 
     } 

     for(ContentTable ct : currentData) 
     { 
      System.out.println("list data "+ct.getId() +" "+ ct.getSubid() +" "+ct.getChpid()+" "+ct.getSec_name()+" "+ct.getContent()); 
     } 

Выход 1 результат массива и списка: данныекак сравнить ArrayList со списком <string[]> Java

массив ->[9, 10, 83, Concepts: 1-10, <p>We&#x2019;ll discuss many of the concepts in this chapter in depth later. But for now, we need a brief review of these concepts to equip you for solving exercises in the chapters that follow.</p>]

список данных ->9 10 83 Concepts: 1-10 <p>We&#x2019;ll discuss many of the concepts in this chapter in depth later. But for now, we need a brief review of these concepts to equip you for solving exercises in the chapters that follow.</p>

//fields with getters and setters in ContentTable Class 
     public class ContentTable { 

      int id; 
      int subid; 
      int chpid; 
      String sec_name; 
      String content; 
      } 

Теперь то, что я хочу добиться того, чтобы создать два списка,

ArrayList<ContentTable> updatedData=new ArrayList<ContentTable>(); 
ArrayList<ContentTable> addedData=new ArrayList<ContentTable>(); 

они будут заполнены данными после сравнения sarray и currentdata таким образом, что,

если ct.getSec_name() или ct.getContent() в определенный индекс в currentdata не равен настоящие данные в sarray, то он будет добавлен в updatedData

И

если ct.getId(), ct.getSubid(), ct.getChpid() в частности индекс не равен ни одному из sarray данных, то он будет добавлен в addedData

Что бы элегантный способ сделать это с меньшей сложностью, и я хочу сделать это быстро так как может потребоваться время для сравнения каждого элемента в Arraylist currentData для сравнения с каждым элементом в ArrayList sarray.

+2

Вам нужно будет сравнить каждый элемент. Чистым способом было бы создать функции сравнения, чтобы идентифицировать обновленные и добавленные данные – Tala

ответ

0

Таким образом, лучшее решение для моей проблемы было не сравнить List<String[]> к ArrayList, но конвертировать List<String[]> другому Arraylist, а затем сравнить новый Arraylist против старой. И это довольно простой и легкий подход, я нашел.

   for(String[] arr : sarray) 
       { 
        ContentTable data=new ContentTable(); 

        for(String s : arr) 
        { 
         data.setId(Integer.parseInt(s)); 
         data.setSubid(Integer.parseInt(s)); 
         data.setChpid(Integer.parseInt(s)); 
         data.setSec_name(s); 
         data.setContent(s); 
        } 
        newData.add(data); 
       } 

Теперь у новогоData есть свежие данные, которые я хочу сравнить с currentData.

0

Как обернуть каждый элемент в массив в Контент. Теперь добавим эти объекты контента в Set. Итерации над ArrayList и для каждого элемента в списке массивов, проверьте, присутствует ли его в наборе. Если не обновить добавленнуюData. Если да, получите этот объект и сравните оба объекта контента с помощью equals.

Обратите внимание, что вы все равно переопределите hashCode и равны по типу контента, чтобы сделать эту работу (Установить).

Однократное действие, которое вы делаете в начале, потребует времени, которое готовит набор. Но как только этот комплект будет готов, посмотрите вверх, чтобы быть очень быстрым.

+0

любую идею по сравнению с «списком » и «list », это самая неприятная вещь здесь. Образец кода выполнит работу – Prateek

+0

Ну, вы можете написать один метод, который итерации по списку , чем для каждого пользовательского, вы можете перебирать список (наивный подход). – zerocool

+0

, но когда я перебираю список , он должен быть повторен снова для каждого объекта [] снова, а затем сравнение должно быть выполнено, это действительно раздражает меня, если я делаю это правильно или нет. – Prateek

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