繁体   English   中英

列表列表,但输出不正确

[英]List of List but by output is not coming right

我一直在尝试将整数列表插入另一个列表,但似乎我在犯一些错误,我的输出不正确,有人可以帮忙吗? 您还可以评论http://goo.gl/xdLP9H

public class ListInsideList {
 public static void main(String[] args) {
    List<List<Integer>> newList = new ArrayList<List<Integer>>();
    List<Integer> tempList = new ArrayList<Integer>();
    List<Integer> originalList = new ArrayList<Integer>(); 
    for (int i = 1; i <= 10; i++) {
        originalList.add(i);//adding values to list
    }
    for(Integer value : originalList){
       tempList.add(value);
       if(tempList.size()==5)
       {
            newList.add(tempList);
            System.out.println("iteration:"+newList);
            tempList.clear();//clearing list
       }
    }
    System.out.println("final:"+newList);

  }
}

输出:

iteration:[[6, 7, 8, 9, 10], [6, 7, 8, 9, 10]]
final :[[], []]
required is:iteration:[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]
final:[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]

您的最终答案需要有2个单独的列表。

  • [1, 2, 3, 4, 5] // List One
  • [6, 7, 8, 9, 10] // List Two

那么,您在哪里创建这两个单独的列表? 您没有,只是在每次迭代中重复使用相同的tempList tempList添加到另一个List不会使它与变量名“ tempList ”分离,后者是对相同对象的引用,然后您clear()

代替clear() ,每次创建一个新的:

  • 代替tempList.clear(); //clearing list tempList.clear(); //clearing list
  • 使用tempList = new ArrayList<>(); // new List tempList = new ArrayList<>(); // new List

您可以替换newList.add(tempList); 与:

1。

注意:要使此方法起作用,您的tempList必须为ArrayList(因为List不可序列化);

newList.add(SerializationUtils.clone(tempList));
templist.clear();

2。

List<Integer> list = new ArrayList<>(newList.size());
list.addAll(newList);
newList.add(list);
newList.clear();

您的列表在最终的打印声明中为空。 如图所示,两个列表都是空的,因此无法打印任何内容,

        System.out.println("final:"+newList.get(0).isEmpty());

    System.out.println("final:"+newList.get(1).isEmpty());

所以改为尝试

 ArrayList<ArrayList<Integer>> newList = new ArrayList<ArrayList<Integer>>();
    ArrayList<Integer> tempList = new ArrayList<Integer>();
    ArrayList<Integer> originalList = new ArrayList<Integer>(); 
    ArrayList<ArrayList<Integer>> finalList = new ArrayList<ArrayList<Integer>>();

    for (int i = 1; i <= 10; i++) {
        originalList.add(i);//adding values to list
    }

    for(Integer value : originalList){
       tempList.add(value);
       if(tempList.size()==5)
       {
            newList.add(tempList);              
            System.out.println("iteration:"+newList);
            finalList = newList;
       }

    }
    System.out.println("final:"+finalList);

您可以执行以下操作以减少工作量:

更改

newList.add(tempList)

newList.add(newArrayList<Integer>(tempList));

为了复制tempList而不使用它的引用

for(Integer value : originalList){
       tempList.add(value);
       if(tempList.size()==5)
       {
            newList.add(new ArrayList<Integer>(tempList));
            System.out.println("iteration:"+newList);
            tempList.clear();//clearing list
       }
    }
    System.out.println("final:"+newList);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM