我想使用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
答案 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)
并使用传递的值计算from
和to
。
答案 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();
}
}