我在解决以下代码的一些问题时遇到了麻烦:
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子类或更加语义化的方法。
答案 0 :(得分:3)
为了将二维数组${ORACLE_HOME}/product/jrockit-jdk1.6.0_20-R28.1.0-4.0.1/bin/keytool -import -alias [AliasForYourCertificate] -keystore ${ORACLE_HOME}/Middleware/wlserver_10.3/server/lib/DemoTrust.jks -file /home/oracle/[YourCertFile].crt
转换为二维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
这样的名字后来容易引起混淆,我建议你用小写字母开始字段名称,并根据它们的目的和可能的类型对它们进行唯一命名,就像我上面做的那样。
答案 1 :(得分:2)
这是你想要做的吗?
请注意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
答案 2 :(得分:0)
我试图弄清楚为什么我不能像在普通数组中那样在asList()方法中定义2d数组。
当你没有告诉我们你的尝试时,我们无法回答为什么你所尝试的不起作用。我想你真正想知道的是如何通过传递单个元素来生成List<String[]>
via 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
List
s(List<List<String>>
)并完全避免使用数组,但我无法确定是否会适合您的目的。