This question already has answers here:
Convert two dimensional array to List in java?
                                
                                    (9个答案)
                                
                        
                4年前关闭。
            
        

我无法弄清楚有关以下代码的一些事情:

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

最佳答案

为了将二维数组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>>以便以后保存所有子列表。
然后迭代数组,并将所有子数组保存到列表中。



顺便说一句,诸如pocketsPockets之类的名称易于在以后引起混乱,我建议您像以前一样,以小写字母开头的字段名,并根据其目的和可能的类型唯一地命名它们。

10-07 13:27
查看更多