如何在Java中比较ArrayList和List<String[]>?

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个结果:

数组数据 -> [9, 10, 83, Concepts: 1-10, <p>我们将在本章节深入讨论这些概念。但现在,我们需要简要回顾这些概念,以便您能够解决后续章节中的练习题。</p>]

列表数据 -> 9 10 83 Concepts: 1-10 <p>我们将在本章节深入讨论这些概念。但现在,我们需要简要回顾这些概念,以便您能够解决后续章节中的练习题。</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后填充数据,如果currentdata中某个索引处的ct.getSec_name()ct.getContent()sarray中的数据不相等,则它将被添加到updatedData中。同时,如果某个索引处的ct.getId()ct.getSubid()ct.getChpid()sarray中的任何数据都不相等,则它将被添加到addedData中。如何以更少的复杂度和更优雅的方式实现此操作,并且我希望能够尽快完成,因为每个元素在Arraylist currentDataArrayList sarray中进行比较可能需要一些时间。

2
你需要比较每个元素。一个简洁的方法是创建比较函数来识别更新和添加的数据。 - Tala
2个回答

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中,然后将这些Content对象添加到Set中。遍历ArrayList,并对于数组列表中的每个元素,检查其是否存在于集合中。如果不存在,则更新addedData。如果存在,则获取该对象并使用equals比较两个Content对象。

请注意,您无论如何都需要重写Content类型中的hashCode和equals方法以使其(Set)正常工作。

您在开始时进行的一次性活动需要时间,即准备好集合。但是一旦准备好了这个集合,查找将非常快速。


有没有关于 list<Custom>list<String[]> 比较的想法,这是最让人烦恼的事情。一个代码示例就可以了,谢谢。 - Prateek
你可以编写一个方法来迭代list<Custom>,然后对于每个custom,你可以迭代list<String[]>(朴素的方法)。 - ajay.patel
但是当我迭代list<String[]>时,必须再次迭代每个string[]对象,然后进行比较,这真的让我很烦恼,不知道我是否做得正确。 - Prateek
你所做的事情是正确的,这正是我所说的一次性活动。一旦你将它们包装成内容,工作就变得更加容易了。 - ajay.patel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接