我正在编写一个TreeToHtmlConverter,它具有一个称为convert的公共静态函数。该函数遍历树以构建HTML字符串并返回。
示例代码:
public class TreeToHtmlConverter {
public static String convert(TreeNode root) {
if (root.isLeaf()) {
return "leaf";
}
String childHtml = root.getChildren().stream()
.map(child -> convert(child))
.collect(Collectors.joining());
return "<p>" + childHtml + "</p>";
}
}
我需要向函数添加行为,以使其返回HTML字符串以及HTML中包含的特殊元素列表(保持通用性,因为列表中的内容并不重要)。此外,将来可能会添加一些行为,其中在构建HTML时我需要收集其他信息。主要目标之一是不添加HTML的另一遍历来收集此信息并一次性获得所有信息。
想法
public class TreeToHtmlConverter {
public static TreeToHtmlResult convert(TreeNode node) {
List<String> specialTags = new ArrayList<>();
String html = convert(node, specialTags);
return new TreeToHtmlResult(html, specialTags);
}
public static String convert(TreeNode node, List<String> specialTags) {
if (node.isLeaf()) {
return "leaf";
}
if (node.isSpecial()) {
specialTags.add(node.getName());
}
String childHtml = node.getChildren().stream()
.map(child -> convert(child, specialTags))
.collect(Collectors.joining());
return "<p>" + childHtml + "</p>";
}
private static class TreeToHtmlResult {
private final String html;
private final List<String> specialTags;
public TreeToHtmlResult(String html, List<String> specialTags) {
this.html = html;
this.specialTags = specialTags;
}
public String getHtml() {
return this.html;
}
public List<String> getSpecialTags() {
return this.specialTags;
}
}
}
任何想法都值得赞赏,请告诉我是否可以提供更多信息来帮助指导对话。