在Java中使用Arrays.asList()进行2d数组

时间:2015-12-04 19:40:43

标签: java arrays

我在解决以下代码的一些问题时遇到了麻烦:

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子类或更加语义化的方法。

3 个答案:

答案 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>>)并完全避免使用数组,但我无法确定是否会适合您的目的。