将ArrayList中的String对象转换为数组Array

时间:2011-03-17 09:05:54

标签: java multidimensional-array arraylist

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

在Views示例的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()]);
    }

正如您在上面的代码段中看到的,转换为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;
}

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

假设您有一个List<Menu>并且每个Menu都可以返回List<String>个收藏夹,我相信您想要这个:

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()]);
}