【问题标题】:Convert String Objects in ArrayList to Array of Arrays将 ArrayList 中的字符串对象转换为数组数组
【发布时间】:2011-03-17 09:05:53
【问题描述】:

我有一个菜单结构,可以输出最喜欢的配置项列表。

在视图示例中的 Android SDK 中有一个我想使用的视图示例,名为 ExpandableList1.java。 为了使用视图,我必须传递一个String[] groups 结构和一个String[][] children 结构。

使用groups.toArray 将字符串列表从菜单对象转换为数组没有问题。我遇到的问题是将收藏夹项目转换为数组数组。最喜欢的项目是包含在菜单对象中的数组列表。

代码的相关部分粘贴在这里。首先我们用一个字符串数组调用 MyExpandableListAdapter:

 @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    ArrayList<String> favouriteMenuList = Main.menuList.getFavouriteMenusFullPath();        

    mAdapter = new MyExpandableListAdapter(favouriteMenuList);
    setListAdapter(mAdapter);
    registerForContextMenu(getExpandableListView());
}

下一个 MyExpandableListAdapter 及其构造函数显示数组转换发生的位置:

public class MyExpandableListAdapter extends BaseExpandableListAdapter {
    // Sample data set.  children[i] contains the children (String[]) for groups[i].
    // private String[] groups = { "People Names", "Dog Names", "Cat Names", "Fish Names" };
    private String [] groups;
    private String[][] children = {
             { "Arnold", "Barry", "Chuck", "David" },
            { "Ace", "Bandit", "Cha-Cha", "Deuce" },
            { "Fluffy", "Snuggles" },
            { "Goldy", "Bubbles" }
    };        

    public MyExpandableListAdapter(ArrayList<String> groups) {          
        this.groups = groups.toArray(new String[groups.size()]);
    }

正如您在上面的代码 sn-p 中看到的那样,转换为String[] groups 没有问题。我的想法是遍历菜单对象,提取收藏夹列表,然后?既然数组大小是固定的,我将如何在 Java 中构建一个动态数组。

这是我想到的外循环:

public ArrayList<FavouritesObject> getFavouriteItems() {
    ArrayList<FavouritesObject> favouritesList = new ArrayList<FavouritesObject>();

    for (MenuObject m : allMenusList) {
        if (m.isFavourite) {
            favouritesList.add(m.getFavouriteItems());
        }           
    }
    return favouritesList;
}

【问题讨论】:

  • 使用列表列表,然后迭代列表并使用toArray?
  • 由于性能原因,数组最好采用固定大小,计算数组的大小,使用该大小创建它,然后将子数组添加到其中不是很好吗?
  • 不相关。 @Eugene van der Merwe,既然您拥有 Snowball.co.za,您能否为 Java 应用程序提供托管服务?最好是 GlassFish、Tomcat、JBoss?

标签: java multidimensional-array arraylist


【解决方案1】:

使用 ArrayList (res) 动态添加项目并将其转换为 Array (mString)。

ArrayList<String> res = new ArrayList<String>();
res.add("Item");
String[] mString = (String[]) res.toArray(new String[res.size()]);

【讨论】:

    【解决方案2】:

    假设你有一个List&lt;Menu&gt; 并且每个Menu 可以返回一个List&lt;String&gt; 的最爱,我相信你想要这个:

    String[][] children = new String[menus.size()][];
    for (int i = 0; i < menus.size(); i++) {
        List<String> favourites = menus.get(i).getFavourites();
        children[i] = favourites.toArray(new String[favourites.size()]);
    }
    

    【讨论】:

    • 这看起来很有希望,我会在接下来的三个小时内尝试并告诉你。
    • 太棒了!像魅力一样工作。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2021-05-09
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    相关资源
    最近更新 更多