How to split array list into equal parts?

前端 未结 9 1287
攒了一身酷
攒了一身酷 2020-11-29 07:20

Is there anyway to split ArrayList into different parts without knowing size of it until runtime? I know there is a method called:

list.subList(a,b);
         


        
9条回答
  •  独厮守ぢ
    2020-11-29 07:57

    I am also doing key:value mapping for values with index.

      public static void partitionOfList(List l1, List l2, int partitionSize){
                Map> mapListData = new LinkedHashMap>();
                List partitions = new LinkedList();
                for (int i = 0; i < l1.size(); i += partitionSize) {
                    partitions.add(l1.subList(i,Math.min(i + partitionSize, l1.size())));
                    l2=new ArrayList(partitions);
                }
                int l2size = l2.size();
                System.out.println("Partitioned List: "+l2);
                int j=1;
                for(int k=0;k) partitions.get(k);
                    // System.out.println(l2.size());
                     if(l2.size()>=partitionSize && l2.size()!=1){
                    mapListData.put("val"+j+"-val"+(j+partitionSize-1), l2);
                    j=j+partitionSize;
                     }
                     else if(l2.size()<=partitionSize && l2.size()!=1){
                        // System.out.println("::::@@::"+ l2.size());
                         int s = l2.size();
                         mapListData.put("val"+j+"-val"+(j+s-1), l2);
                            //k++;
                            j=j+partitionSize;
                     }
                     else if(l2.size()==1){
                        // System.out.println("::::::"+ l2.size());
                         //int s = l2.size();
                         mapListData.put("val"+j, l2);
                            //k++;
                            j=j+partitionSize;
                     }
                }
                System.out.println("Map: " +mapListData);
            }
        
        public static void main(String[] args) {
                List l1 = new LinkedList();
                l1.add(1);
                l1.add(2);
                l1.add(7);
                l1.add(4);
                l1.add(0);
                l1.add(77);
                l1.add(34);
        
        partitionOfList(l1,l2,2);
        }
    
    

    Output:

    Partitioned List: [[1, 2], [7, 4], [0, 77], [34]]

    Map: {val1-val2=[1, 2], val3-val4=[7, 4], val5-val6=[0, 77], val7=[34]}

    提交回复
    热议问题