如何在java中动态地将字符串列表拆分为多个列表

时间:2012-08-29 07:10:18

标签: java

我想使用java程序动态地根据输入值将字符串列表拆分成多个列表。

例如。 如果我有以下字符串列表

     List<String> messages = Arrays.asList("Hello", "World!", "How", "Are", "You");

如果我输入2作为输入值,我必须将字符串列表拆分为多个列表,每个拆分列表中应包含2个值。

注意:列表应包含的值应基于输入值

       outputshould be: 
       list1 contains-> Hello,world
       list2 contains -> How,Are
       list3 contains -> you

4 个答案:

答案 0 :(得分:1)

Guava图书馆有Lists#partition

  

返回列表的连续子列表,每个列表具有相同的大小(最终列表可能更小)。例如,使用分区大小为3的包含[a,b,c,d,e]的列表进行分区会产生[[a,b,c],[d,e]] - 包含两个内部列表的外部列表三个和两个元素,都按原始顺序排列。

答案 1 :(得分:1)

另一个答案表明List.subList()是最简单的方法。我将使用Math.min来覆盖最后一个分区案例。

int partitionSize = 2;
List<List<String>> partitions = new LinkedList<List<String>>();
for (int i = 0; i < messages.size(); i += partitionSize) {
    partitions.add(messages.subList(i,
            i + Math.min(partitionSize, messages.size() - i)));
}

答案 2 :(得分:0)

您可以使用list.subList(from, to)并使用传递的值计算fromto

答案 3 :(得分:0)

正如我们所知道的那样,每个第二个元素上的列表都是切割的,你可以这样做。

public class Testing {

List<String> messages = Arrays.asList("Hello", "World!", "How", "Are",
        "You");
List<List<String>> lists = new ArrayList<List<String>>();

public Testing() {
    for (int i = 0; i < messages.size(); i++) {
        lists.add(getPartOfList(i));
        i++;
    }
}

private List<String> getPartOfList(int index){
    List<String> tmp = new ArrayList<String>();
    int counter = 0;

    while(counter != 2){
        if(messages.size() > index)
            tmp.add(messages.get(index));
        index++;
        counter++;
    }

    System.out.println(tmp);
    return tmp;
}

public static void main(String[] args) {
    new Testing();
}
}