diff --git a/jOOQ/src/main/java/org/jooq/Records.java b/jOOQ/src/main/java/org/jooq/Records.java index 37c9478292..cda8e622eb 100644 --- a/jOOQ/src/main/java/org/jooq/Records.java +++ b/jOOQ/src/main/java/org/jooq/Records.java @@ -42,12 +42,16 @@ import static java.util.stream.Collectors.toCollection; import java.lang.reflect.Array; import java.util.ArrayList; +import java.util.Collection; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; +import java.util.function.BiFunction; import java.util.function.Function; +import java.util.function.Supplier; import java.util.stream.Collector; import java.util.stream.Collectors; @@ -573,6 +577,109 @@ public final class Records { ); } + /** + * Create a collector that can collect {@link Record} resulting from a + * {@link ResultQuery} into a hierarchy of custom data types. + *
+ * For example: + *
+ * + *
+ *
+ * record File(String name, List<File> contents) {}
+ *
+ * List<File> files =
+ * ctx.select(FILE.ID, FILE.PARENT_ID, FILE.NAME)
+ * .from(FILE)
+ * .collect(intoHierarchy(
+ * r -> r.value1(),
+ * r -> r.value2(),
+ * (r, l) -> new File(r.value3(), l)
+ * ));
+ *
+ *
+ *
+ * @param ID)
+ * @param + * For example: + *
+ * + *
+ *
+ * record File(String name, List<File> contents) {}
+ *
+ * List<File> files =
+ * ctx.select(FILE.ID, FILE.PARENT_ID, FILE.NAME)
+ * .from(FILE)
+ * .collect(intoHierarchy(
+ * r -> r.value1(),
+ * r -> r.value2(),
+ * (r, l) -> new File(r.value3(), l),
+ * ArrayList::new
+ * ));
+ *
+ *
+ *
+ * @param ID)
+ * @param