如何在ArrayList中添加ArrayList

时间:2017-04-07 06:20:27

标签: java arraylist

ArrayList插入ArrayList时,我遇到了问题。

我的源代码:

import java.util.ArrayList;

public class Ask {
    public static void main(String[] args) {        
          ArrayList<String> mentah = new ArrayList<String>();

          mentah.add("Reza");
          mentah.add("Fata");
          mentah.add("Faldy");
          mentah.add("Helsan");
          mentah.add("Dimas");
          mentah.add("Mamun");
          mentah.add("Erik");
          mentah.add("Babeh");
          mentah.add("Tio");
          mentah.add("Mamang");

          ArrayList<ArrayList<String>> result =new ArrayList<ArrayList<String>>();

          result.add(mentah);   
    }
}

如何根据该数据创建列表;看起来像是:

[[data1,data2,data3],[data4,data5,data6],[data7,data8,data9,data10]]

10 div 3为3(每个子列表3个元素)

10 mod 3是1(所以最后一个子列表有4个条目)

10除以3是 3 3 4

4 个答案:

答案 0 :(得分:1)

更通用的解决方案如下:

List<String> allNames = Arrays.asList("Reza", "Fata", ...
List<List<String>> slicedNames = new ArrayList<>();

List<String> sublist = new ArrayList<>();
int sublistTargetLength = 3;

for (String name : allNames) { 
  sublist.add(name);
  if (sublist.size() == sublistTargetLength) {
    slicedNames.add(sublist);
    sublist = new ArrayList<>();
  }    
}
if (sublist.size() > 0) {
  slicedNames.get(slicedNames.size()-1).addAll(sublist);
}

一些注意事项:

  • 上面重复你的初始名称列表(可以使用对Arrays.asList()的单个调用创建;并将条目放入相同大小的列表中;然后将其添加到listsNames列表列表中。
  • 如果有任何“剩余”数据;这只是添加到列表列表的最后一个元素。
  • 您应该更喜欢使用接口类型List作为变量类型;在实例化列表时只使用特定的实现类(ArrayList)
  • 在迭代任何内容时,尽可能选择for-each循环样式

答案 1 :(得分:0)

试试这个。您可以使用subList方法实现此目的。

07/04/2017

答案 2 :(得分:0)

刚刚升级了@Narayana Ganesh的答案:

ArrayList<String> mentah = new ArrayList<String>();
mentah.add("Reza");
mentah.add("Fata");
mentah.add("Faldy");
mentah.add("Helsan");
mentah.add("Dimas");
mentah.add("Mamun");
mentah.add("Erik");
mentah.add("Babeh");
mentah.add("Tio");
mentah.add("Mamang");

List<List<String>> result = new ArrayList<List<String>>();

for (int j= 0; j< mentah.size() ; j+=3) {
    int end = mentah.size() <= j+2 ? mentah.size() : j+3;
    if(mentah.size() - j == 4) end = end +1;
    if(j != 9) result.add(mentah.subList(j, end));
}
    System.out.println(result);  
}

<强>结果:
 [[Reza, Fata, Faldy], [Helsan, Dimas, Mamun], [Erik, Babeh, Tio, Mamang]]

答案 3 :(得分:0)

首先创建一个最大尺寸为3的子列表,它会给你这样的东西

[[Reza, Fata, Faldy], [Helsan, Dimas, Mamun], [Erik, Babeh, Tio], [Mamang]]

然后检查最后一个子列表大小是否小于3,如果是,则将其添加到倒数第二个子列表并删除最后一个

public class Example {
    public static void main(String[] args) {
        List<String> mentah = new ArrayList<>();
        mentah.add("Reza");
        mentah.add("Fata");
        mentah.add("Faldy");
        mentah.add("Helsan");
        mentah.add("Dimas");
        mentah.add("Mamun");
        mentah.add("Erik");
        mentah.add("Babeh");
        mentah.add("Tio");
        mentah.add("Mamang");

        List<List<String>> parts = new ArrayList<>();
        int sizeOfOriginalList = mentah.size();
        int sizeOfSubLists = 3;
        for (int i = 0; i < sizeOfOriginalList; i += sizeOfSubLists) {
            parts.add(new ArrayList<>(mentah.subList(i, Math.min(sizeOfOriginalList, i + sizeOfSubLists))));                
        }
        if(parts.get(parts.size()-1).size()<sizeOfSubLists){
            parts.get(parts.size()-2).addAll(parts.get(parts.size()-1));
            parts.remove(parts.get(parts.size()-1));
        }
        System.out.println(parts);
    }        
}