Java 按列读取元素的正确有效方法

Java 按列读取元素的正确有效方法,java,Java,我找不到按列读取元素的正确方法 输入是一个包含10个列表的列表,这10个列表包含具有可变列大小的元素 我所做的 任务1:将10个列表添加到单个列表中 任务2:找到一列可以拥有的最大大小,以便我可以应用循环直到该列 任务3 按列检索列表 代码: //任务1将10个列表添加到单个列表中 List<List<Integer>> outer=new ArrayList<>(); ArrayList<Integer> innerSize=ne

我找不到按列读取元素的正确方法

输入是一个包含10个列表的列表,这10个列表包含具有可变列大小的元素

我所做的

任务1:将10个列表添加到单个列表中

任务2:找到一列可以拥有的最大大小,以便我可以应用循环直到该列

任务3 按列检索列表

代码: //任务1将10个列表添加到单个列表中

    List<List<Integer>> outer=new ArrayList<>();
    ArrayList<Integer> innerSize=new ArrayList<Integer>();
    List<Integer> inner=null;
     int ar[][]=new int[10][];
     int ar1[] =new int[ar.length];
      for(int i=0;i<10;i++)
      {
          System.out.println("Enter the Size of the list "+i);
             String s1=sc.next();

             int N=Integer.parseInt(s1); //Calculate the Size:
              inner=new ArrayList<Integer>();
              innerSize.add(N);
         for(int j=0;j<N;j++)
         {
              System.out.println("Enter the Elements of the list "+i);

           inner.add(Integer.parseInt(sc.next()));
         }
         System.out.println(inner);
         outer.add(inner);
      }
      System.out.println(outer);

      Task 2 
      System.out.println("Finding the maximum element");
      Integer max=null;
     Iterator<Integer> ltr=innerSize.listIterator();
      if(ltr.hasNext())
      {
          Integer element=(Integer)ltr.next();
             max=element;
            while(ltr.hasNext())
            {
                Integer element1=(Integer)ltr.next();
                if(element1>max)
                {
                    max=element1;
                }
            }
      }
      System.out.println("Maximum Element is"+max);

     //Task 3
      //Retrieving the List ColumnWise.
      Iterator ltr1=outer.listIterator();

      for(int j=0;j<max;j++)
      {

              while(ltr1.hasNext())
              {
                  List l0tol9=(List)ltr1.next(); //I have one list taken from the 10 lists.
                  Iterator ltr2=l0tol9.listIterator();
                    while(ltr2.hasNext())
                    {
                        Integer i1=(Integer)ltr2.next();
                        if(i1!=null)
                        {
                            System.out.println(i1);
                            break;
                        }
                    }
              }

          }
预期产量 是

显示的输出:(仅第1列)


以下是按列浏览二维列表的简单方法:

int maxColSize = outer.stream().mapToInt(List::size).max().orElse(0);
for (int y=0; y<maxColSize; y++) {
    for (int x=0; x<outer.size(); x++) {
        List<Integer> currentInner = outer.get(x);
        if (currentInner.size() > y) {
            System.out.println(currentInner.get(y));
        }
    }
}
int maxColSize=outer.stream().mapToInt(List::size).max().orElse(0);

对于(int y=0;yThankx)获取高效的代码,但如果我想通过Java 7来实现这一点。@user6389648我已经为Java 7添加了代码。您应该指定何时不能使用最新的Java版本,Java 8已经发布了2年,除非您另外指定,否则您应该期望获得它的代码。感谢Aaron提供的代码。很抱歉,我没有提到它你把我的知识提升到了一个很高的水平。我也有很多问题,我将在一个单独的线程中提出,这是与流相关的,因为我是新来的。
1
1  
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
1
int maxColSize = outer.stream().mapToInt(List::size).max().orElse(0);
for (int y=0; y<maxColSize; y++) {
    for (int x=0; x<outer.size(); x++) {
        List<Integer> currentInner = outer.get(x);
        if (currentInner.size() > y) {
            System.out.println(currentInner.get(y));
        }
    }
}
int maxColSize=0;
for (List<Integer> row : outer) { maxColSize = Math.max(maxColSize, row.size()); }