2013-07-06 65 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分的结果:如何与列表<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>(); 

这些会的sarraycurrentdata比较后以这样的方式填充数据,

如果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); 
       } 

现在,newData有新的数据,我想与currentData进行比较。

0

如何将包含数组中的每个元素包含到Content中。现在将这些内容对象添加到Set。迭代ArrayList和数组列表中的每个元素,检查它是否存在于集合中。如果不更新addedData。如果是,则获取该对象并使用equals比较两个内容对象。

请注意,您将无论如何覆盖hashCode和等于内容类型使此(Set)工作。

您在开始时所做的一次性活动需要一定的时间,这样才能使设置准备就绪。但是一旦这套准备就绪,看起来真的很快。

+0

对'list '和'list '的比较有任何想法,这是这里最烦人的事情。一个代码示例将完成这项工作,谢谢 – Prateek

+0

恩,你可以编写一个迭代遍历列表的方法,比每个定制都可以迭代列表(天真的方法)。 – zerocool

+0

但是当我遍历列表那么它必须再次迭代每个string []对象,然后比较必须完成,这真的很烦我,如果我做对了或没有。 – Prateek