3

我想使用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

4 回答 4

1

Guava 库有Lists#partition

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

于 2012-08-29T07:12:30.377 回答
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)));
}
于 2012-08-29T08:10:25.380 回答
0

正如我们所知,list 每隔一个元素就会被切割,你可以这样做。

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();
}
}
于 2012-08-29T08:30:22.333 回答
0

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

于 2012-08-29T07:36:22.627 回答