import java.util.function.Function; import java.util.function.BiFunction; import java.util.stream.Collectors; import java.util.stream.Stream; import java.util.*; public class Html { private HtmlTag tag; private String body; private Html(HtmlTag tag, String body) { this.tag = tag; this.body = body; } public static Html html(HtmlTag tag, Html... body) { return new Html(tag, Arrays.asList(body).stream().map(Html::toString).collect(Collectors.joining())); } public static Html str(HtmlTag tag, String body) { return new Html(tag, body); } @Override public String toString() { return String.format("<%s>%s", tag, body); } public static Function, Html> mkList = (s) -> html(HtmlTag.UL, s.map((li) -> str(HtmlTag.LI, li)).toArray(Html[]::new)); public static final Html index = str(HtmlTag.P, "Hello World!"); }