我很难弄清楚关于以下代码的几件事:
public final String[][] pockets = {{"STATUS CHANGERS", "RUNES", "KEY ITEMS", "TROPHIES"},
{"POTION", "SUPER POTION", "FULL HEAL"},{"ARMOR+","ATTACK+","EXP+","HEALTH+", "DISPELL+"},
{"QUEST ITEMS","STORY ITEMS","JOURNAL"},{TROPHIES}};
public final List<String[]> Pockets = Arrays.asList(pockets); //why couldn't I define it in the method, I wonder?
我试图弄清楚为什么我不能像普通数组那样在asList()
方法中定义2d数组。而且,我知道必须有一个Java子类来导入,或者使用一种更语义的方法。
发布于 2015-12-04 19:57:38
为了将二维数组E[][]
转换为二维List<List<E>>
,可以使用以下代码(请参阅下面的说明):
public final String[][] pocketArray = {{"STATUS CHANGERS", "RUNES", "KEY ITEMS", "TROPHIES"},
{"POTION", "SUPER POTION", "FULL HEAL"}, {"ARMOR+", "ATTACK+", "EXP+", "HEALTH+", "DISPELL+"},
{"QUEST ITEMS", "STORY ITEMS", "JOURNAL"}, {"TROPHIES"}};
public final List<List<String>> pocketList;
public Test()
{
pocketList = new ArrayList<>(pocketArray.length);
for (String[] pocket : pocketArray)
{
List<String> currentSubList = new ArrayList<>(pocket.length);
// Nice and fast way instead of iterating over the whole array and adding the strings to the list.
Collections.addAll(currentSubList, pocket);
// instead, you could do something like this:
//
// for (String currentString : pocket)
// {
// currentSubList.add(currentString);
// }
//
pocketList.add(currentSubList);
// Alternatively, you could use something like this:
// pocketList.add(Arrays.asList(pocket));
}
}
基本上,这段代码正在创建一个新的ArrayList<List<String>>
,以便稍后保存所有的子列表。然后遍历数组,并将所有子数组保存到列表中。
顺便说一句,像pockets
和Pockets
这样的名字以后很容易引起混淆,我建议您以小写字母开始字段名,并按照它们的用途和可能的类型命名它们,就像我上面所做的那样。
发布于 2015-12-04 19:51:19
这就是你想做的吗?注意new String[][]
的使用
public final List<String[]> Pockets = Arrays.asList(new String[][]{{"STATUS CHANGERS", "RUNES", "KEY ITEMS", "TROPHIES"},
{"POTION", "SUPER POTION", "FULL HEAL"},{"ARMOR+","ATTACK+","EXP+","HEALTH+", "DISPELL+"},
{"QUEST ITEMS","STORY ITEMS","JOURNAL"},{"TROPHIES"}});
PS:Pockets
不是一个标准的命名约定,我建议pocketList
发布于 2015-12-04 20:03:09
我试图弄清楚为什么我不能像普通数组那样在asList()方法中定义2d数组。
当你不告诉我们你尝试了什么,我们就不能回答为什么你的尝试不起作用。不过,我想您真正想知道的是,如何通过传递单个元素来通过List<String[]>
生成Arrays.asList()
,而不是首先构造2D数组。这将是:
public final List<String[]> pockets = Arrays.asList(
new String[]{"STATUS CHANGERS", "RUNES", "KEY ITEMS", "TROPHIES"},
new String[]{"POTION", "SUPER POTION", "FULL HEAL"},
new String[]{"ARMOR+","ATTACK+","EXP+","HEALTH+", "DISPELL+"},
new String[]{"QUEST ITEMS","STORY ITEMS","JOURNAL"},
new String[]{"TROPHIES"}
);
特别要注意的是,Java没有数组文本,只有数组初始化器(可以与数组声明相关联)和数组构造函数,如上面的代码。我推测,在您的尝试中,忽略了构成这些构造函数的new String[]
位。如果没有其他原因,那么这些位对于指定数组的元素类型是必要的。
而且,我知道必须有一个Java子类来导入,或者使用一种更语义的方法。
我不明白你的意思。您已经在使用类java.util.Array
来执行构造,并且正在构建一个java.util.List
。我想,在大多数情况下,我建议使用List
of List
s (List<List<String>>
)并完全避免数组,但我不能确定这是否适合您的目的。
https://stackoverflow.com/questions/34096189
复制相似问题