循环遍历java.util.List并填充java.util.Map

时间:2013-12-17 22:08:43

标签: java list loops map

有一个班级'类别':

public class Category
{
private Integer id;
private String name;
private Category parentCategory;
...
//getters and setters
}

然后,java.util.List<Category> categories是一个Category实例列表。如您所见,一个类别对象可以是其他类别(类别和子类别概念)的父级。 我想遍历此列表并创建一个由(categoryObject,categoryObject的子类别列表)组成的映射。我该如何实现这个循环?

2 个答案:

答案 0 :(得分:1)

这个怎么样?

    final Map<Category,List<Category>> map = new HashMap<>();
    for (Category cat : categories) {
        if (cat.parentCategory == null) continue;
        List<Category> children = map.get(cat.parentCategory);
        if (children == null) {
            children = new ArrayList<>();
            map.put(cat.parentCategory, children);
        }
        children.add(cat);
    }

但我会使用集合而不是列表。甚至更好:番石榴的多图。

答案 1 :(得分:0)

也许这样的事情,我附近没有编译器,所以他们可能是一个或两个编译器错误,但接近这个的东西应该有效。

Map<Category, List<Category> > myMap = new HashMap<Category, List<Category> >();

for (Category cat : categories) {
    if (cat.parentCategory != null) {
        List<Category> myList;
        if (myMap.get(cat.parentCategory) == null) {
            myList = new ArrayList<Category>();
        } else {
            myList = myMap.get(cat.parentCategory);
        }
        myList.add(cat);
        myMap.put(cat.parentCategory, myList);
    }
}