Java 使用值初始化多维ArrayList
我不熟悉编码。我的老师最近介绍了数组和数组列表。我有一个多维数组,如下所示:Java 使用值初始化多维ArrayList,java,arrays,arraylist,Java,Arrays,Arraylist,我不熟悉编码。我的老师最近介绍了数组和数组列表。我有一个多维数组,如下所示: private String[][] pods = {{"pod1", ""}, {"pod2", ""}, {"pod3", ""}, {"pod4", ""}}; 我想将其切换到arraylist,因为我需要编辑其中的信息 如果使用多维数组列表,我将如何执行此操作?我想用上述信息对其进行初始化。 我试过这个: private ArrayList<ArrayList<String>> pod
private String[][] pods = {{"pod1", ""}, {"pod2", ""}, {"pod3", ""}, {"pod4", ""}};
我想将其切换到arraylist,因为我需要编辑其中的信息
如果使用多维数组列表,我将如何执行此操作?我想用上述信息对其进行初始化。
我试过这个:
private ArrayList<ArrayList<String>> pods = new ArrayList();
private ArrayList pods=new ArrayList();
每当我把东西放在括号之间,就会得到一个无效的运算符错误
顺便说一下,万一有人想知道,这不是课堂作业。这是我自己在尝试的事情
谢谢。您可以先创建内部ArrayList,然后使用
pods,尝试将项目添加到pods
ArrayList。添加:
// create your initial ArrayList
private ArrayList<ArrayList<String>> pods = new ArrayList<ArrayList<String>>();
// create an ArrayList<String> to add to it
private ArrayList<String> list1 = new ArrayList<String>();
list1.add("foo");
// create another
private ArrayList<String> list2 = new ArrayList<String>();
list2.add("bar");
// add the inner ArrayLists to your main ArrayList
pods.add(list1);
pods.add(list2);
//创建初始ArrayList
private ArrayList pods=new ArrayList();
//创建要添加到其中的ArrayList
private ArrayList list1=新的ArrayList();
清单1.添加(“foo”);
//创造另一个
private ArrayList list2=新的ArrayList();
清单2.添加(“酒吧”);
//将内部ArrayList添加到主ArrayList
添加(列表1);
添加(列表2);
首先,你的方法有一半是正确的
对于二维数组,可以使用ArrayList
的ArrayList
s
然而
您正在将列表初始化为原始类型。在Java 7中,您只需将赋值更改为菱形类型即可进行推理:
List<List<String>> pods = new ArrayList<>();
输出
[[pod1, ], [pod2, ], [pod3, ], [pod4, ]]
[[pod1, ], [pod2, ], [pod3, ], [pod4, ]]
现在,一些Java 8魔咒:
String[][] info = {{"pod1", ""}, {"pod2", ""}, {"pod3", ""}, {"pod4", ""}};
List<List<String>> pods =
Arrays.stream(info)
.map((a) -> Arrays.asList(a))
// use this instead if you intend to modify the inner lists
// .map((a) -> Arrays.stream(a).collect(Collectors.toList()))
.collect(Collectors.toList());
System.out.println(pods);
您只需要在数组上迭代并将项添加到列表中。
完成一行后,只需将列表添加到主列表中
List<List<String>> list = new ArrayList<List<String>>();
for ( int i = 0 ; i < rowsCount ; i++ )
{
List<String> temp = new ArrayList<String>();
for ( int j = 0 ; j < colsCount ; j++ )
temp.add ( arr[i][j]);
list.add (temp);
}
List List=new ArrayList();
for(int i=0;i
或者,您可以执行以下操作:
for ( int i = 0 ; i < rowsCount ; i++ )
{
list.add (Arrays.asList(arr[i]));
}
for(int i=0;i
但使用第二种方法将阻止您在任何索引处扩展每个列表项
如果您在使用数组时绝对想要一个类似的单行程序,那么您可以使用这个“单行程序”(您还需要导入静态java.util.arrays.asList;
):
List pods=newarraylist(asList(
新的ArrayList(asList(“pod1”和“),
新的ArrayList(asList(“pod2”和“),
新的ArrayList(asList(“pod3”和“),
新的ArrayList(asList(“pod4”和“))
));
我认为您不需要所有新的ArrayList位——您只需要使用asList()位即可。此外,在大多数情况下,您不应该在代码中引用ArrayList。不幸的是,asList
返回一个固定大小的ArrayList
。如果需要在初始化后追加元素,则需要使用复制构造函数来创建“适当”的可调整大小的列表。是的,否则它会简化很多事情。而且OP实际上提到了编辑列表中数据的需要,所以仅仅公平的代码就被认为是低质量的答案。您应该指出为什么这回答了OP的问题Arrays.asList
返回一个固定大小的List
。我相信您无法使用此解决方案将元素附加到内部列表中。@ManosNikolaidis这是正确的,尽管不是原始问题的要求。我想最简单的解决方案是将调用封装在构造函数中。
List<List<String>> list = new ArrayList<List<String>>();
for ( int i = 0 ; i < rowsCount ; i++ )
{
List<String> temp = new ArrayList<String>();
for ( int j = 0 ; j < colsCount ; j++ )
temp.add ( arr[i][j]);
list.add (temp);
}
for ( int i = 0 ; i < rowsCount ; i++ )
{
list.add (Arrays.asList(arr[i]));
}
List<List<String>> pods = new ArrayList<>(asList(
new ArrayList<>(asList("pod1", "")),
new ArrayList<>(asList("pod2", "")),
new ArrayList<>(asList("pod3", "")),
new ArrayList<>(asList("pod4", ""))
));