使用一个类来定义一个类别/子类别,另一个来定义一个产品。
您的类别是一个包含类别列表和产品列表的对象。
public class Category {
private String name;
private List<Category> subCategories;
private List<Product> products;
// getter/setters
}
public class Product {
private String name;
// any other property defining your product
// getters/setters
}
有了这个,你可以建立一棵树。使用工厂;一个实用程序类,甚至是您的类别对象的构建器(但这很脏)来构建您的树。
然后将您的字符串传递给 Utility 类以将其添加到您的树中
public class ProductTreeBuilder {
public static Category addToTree(Category mainNode, String toAdd) {
if (mainNode == null) {
mainNode = new Category("BaseCategory");
}
Category currentNode = mainNode;
String[] path = toAdd.split("::");
for (int i = 0; i < path.length; i++) {
String nameCatOrProduct = path[i];
// if end of path, it's a produc
// if it's not in product list, add it
if ((i == path.length - 1) && !currentNode.getProducts().contains(nameCatOrProduct)) {
currentNode.getProducts().add(new Product(nameCatOrProduct));
} else {
// check if currentNode contains subCategory
Category subCategory = currentNode.getSubCategories().stream().filter(c -> c.getName().equals(
nameCatOrProduct)).findFirst().orElse(null);
if (subCategory == null) {
// subCategory doesn't exist yet, create it
subCategory = new Category(nameCatOrProduct);
currentNode.getSubCategories().add(subCategory);
}
// continue with the subCaegory
currentNode = subCategory;
}
}
return mainNode;
}
}
那么你可以简单地使用你的工厂来构建你的树:
Category tree = null;
tree = ProductTreeBuilder.addToTree(tree, "cat1::cat2::test");
tree = ProductTreeBuilder.addToTree(tree, "cat2::test");