我想将一个字符串数组转换为ArrayList
的ArrayList,其中内部ArrayList
具有动态数量的元素。谁可以帮忙?提前致谢
String[] sentences = {"hello","how are you","i am fine","and you ?","thank you"}
//Output with number of elements = 2
["hello","how are you"]
["i am fine","and you ?"]
["thank you"]
//Output with number of elements = 3
["hello","how are you","i am fine"]
["and you ?","thank you"]
答案 0 :(得分:0)
public static void main(String[] args) {
String[] sentences = {"hello", "how are you", "i am fine", "and you ?", "thank you"};
System.out.println(split(2,sentences));
System.out.println(split(3,sentences));
}
public static List<List<String>> split(int numberOfElements, String[] sentences) {
List<List<String>> lists = new ArrayList<List<String>>();
int index = 0;
for (String sentence : sentences) {
if (index % numberOfElements == 0) {
lists.add(new ArrayList<String>());
}
lists.get(index / numberOfElements).add(sentences[index]);
index++;
}
return lists;
}
输出:
[[hello, how are you], [i am fine, and you ?], [thank you]]
[[hello, how are you, i am fine], [and you ?, thank you]]
答案 1 :(得分:0)
public static void main(String[] args) {
String[] sentences = { "hello", "how are you", "i am fine", "and you ?", "thank you" };
List<List<String>> convertIntoList = convertIntoList(sentences, 2);
System.out.println(convertIntoList);
convertIntoList = convertIntoList(sentences, 3);
System.out.println(convertIntoList);
}
private static List<List<String>> convertIntoList(String[] sentences, int nbElement) {
List<List<String>> listOfListTarget = new ArrayList<List<String>>();
int currentIndex = 0;
while (currentIndex < sentences.length) {
int nextIndex = currentIndex + nbElement;
if (nextIndex > sentences.length) {
nextIndex = sentences.length;
}
final String[] copyOfRange = Arrays.copyOfRange(sentences, currentIndex, nextIndex);
List<String> subList = new ArrayList<String>();
subList.addAll(Arrays.asList(copyOfRange));
listOfListTarget.add(subList);
currentIndex+=nbElement;
}
return listOfListTarget;
}
答案 2 :(得分:0)
这是作业吗?
所以你有一个字符串数组,并且你想创建一个List&gt;这样,每个内部List最多包含x个元素。
要获取x个元素并将它们放在List中,您可以执行一个简单的for循环。
String[] myStringArray = { ... };
List<String> myListOfString = new ArrayList<>();
for(int i=0; i<x; i++) {
myListOfString.add(myStringArray[i]);
}
例如,如果您有这些值
String[] myStringArray = {"a", "b", "c", "d", "e"};
x = 2;
您将使用上述循环获得以下列表:
["a", "b"]
大!但是我们需要获得myStringArray
的所有内容!我们怎么做?然后让我们做第一步,我们遍历数组的所有内容。我们可以这样做。
int i=0;
while(i < myStringArray.length) {
System.out.println(myStringArray[i]);
i++;
}
将输出:
a
b
c
d
e
这并没有解决问题...但至少我们知道如何迭代整个事情。下一步是获得它们的x。听起来很简单吧?所以基本上我们需要从内容中创建一个x列表。也许我们可以使用我们创建的一些逻辑来解决问题。
// Create list of list of string here
int i = 0;
while(i < myStringArray.length) {
// Create list of string here
for(int j=0; j<x; j++) {
// Add myStringArray[j] to list of string here
}
// Add the list of string to the list of list of string here
i++;
}
容易对吗?不。这给出了以下列表:
["a", "b"]
["a", "b"]
["a", "b"]
["a", "b"]
["a", "b"]
为什么呢?在第一个循环中,我们迭代到数组中有多少。在第二个循环中,我们将元素0和1添加到列表中。显然它不会起作用。第二个循环需要知道它不应该添加以前添加的元素,同时第一个循环需要知道第二个循环正在做什么。所以您可能会想,也许我们可以使用int i
来指示第二个循环应该从哪里开始?
int i = 0;
while(i<myStringArray.length) {
while(i<x) {
// add myStringArray[i];
i++;
}
i++;
}
不幸的是,使用与之前相同的值,这只会给出以下列表
["a", "b"]
因为i
正在遍历整个数组。所以当它从0变为长度时,无论i的值是在第二个数组上使用的。当它再次循环时,i
变为1,因此第二个循环的开始是1。
我们需要一个单独的变量来进行计数,同时仍然记住我们当前在第二个循环中的位置。
int i = 0;
while(i<myStringArray.length) {
int count = 0;
while(count < x) {
// Add myStringArray[count+i] to list of string
count++;
}
// Add to list of list of string
i += count + 1; // Need to be aware of how much we have processed
}
这将做我们想要的,但不幸的是我们可能会遇到某些价值的麻烦。假设x
是10而myStringArray
只有长度2.这将抛出异常,因为当它到达count + i = 3时,该索引不再存在。第二个循环还需要知道还剩下多少。
最后,我们将拥有以下代码
int i = 0;
while(i<myStringArray.length) {
int count = 0;
while(count < x && count+i < myStringArray.length) {
// Add myStringArray[count+i] to list of string
}
// Add to list of list of string
i += count; // Need to be aware of how much we have processed
}
哪个会给出
["a", "b"]
["c", "d"]
["e"]
编辑:下次尝试放一些你尝试过的代码。