有一个类'Category':
public class Category
{
private Integer id;
private String name;
private Category parentCategory;
...
//getters and setters
}
然后,java.util.List<Category> categories
是类别实例的列表。如您所见,一个类别对象可以是其他类别(类别和子类别概念)的父对象。我想遍历此列表并创建一个包含(类别对象,子类别列表到类别对象)的映射。如何实现此循环?
这个怎么样?
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);
}
但是我会使用集合而不是列表。甚至更好:番石榴的多地图。
也许像这样的事情,我附近没有编译器,所以它们可能是一两个编译器错误,但接近这一点的东西应该可以工作。
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);
}
}