首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Java中为2d数组使用Arrays.asList()

在Java中为2d数组使用Arrays.asList()
EN

Stack Overflow用户
提问于 2015-12-04 19:40:43
回答 3查看 3.7K关注 0票数 0

我很难弄清楚关于以下代码的几件事:

代码语言:javascript
运行
复制
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子类来导入,或者使用一种更语义的方法。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-12-04 19:57:38

为了将二维数组E[][]转换为二维List<List<E>>,可以使用以下代码(请参阅下面的说明):

代码语言:javascript
运行
复制
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这样的名字以后很容易引起混淆,我建议您以小写字母开始字段名,并按照它们的用途和可能的类型命名它们,就像我上面所做的那样。

票数 3
EN

Stack Overflow用户

发布于 2015-12-04 19:51:19

这就是你想做的吗?注意new String[][]的使用

代码语言:javascript
运行
复制
 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
EN

Stack Overflow用户

发布于 2015-12-04 20:03:09

我试图弄清楚为什么我不能像普通数组那样在asList()方法中定义2d数组。

当你不告诉我们你尝试了什么,我们就不能回答为什么你的尝试不起作用。不过,我想您真正想知道的是,如何通过传递单个元素来通过List<String[]>生成Arrays.asList(),而不是首先构造2D数组。这将是:

代码语言:javascript
运行
复制
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 Lists (List<List<String>>)并完全避免数组,但我不能确定这是否适合您的目的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34096189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档