diff --git a/jOOQ/src/main/java/org/jooq/Record.java b/jOOQ/src/main/java/org/jooq/Record.java index 1e7caf14f6..f85becc6be 100644 --- a/jOOQ/src/main/java/org/jooq/Record.java +++ b/jOOQ/src/main/java/org/jooq/Record.java @@ -48,6 +48,7 @@ import java.sql.SQLData; import java.sql.Statement; import java.util.List; import java.util.Map; +import java.util.stream.Stream; import javax.annotation.Generated; import javax.persistence.Column; @@ -657,6 +658,20 @@ public interface Record extends Attachable, Comparable { */ List intoList(); + + /** + * Convert this record into aa stream. + *

+ * The resulting stream has the same number of elements as this record has + * fields. The resulting stream contains data as such: + *

+ * This is the same as calling into(Stream.class) + * + * @return This record as a stream + */ + Stream intoStream(); + + /** * Return this record as a name/value map. *

diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractRecord.java b/jOOQ/src/main/java/org/jooq/impl/AbstractRecord.java index 03bfa5a0de..d3e9e95d93 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractRecord.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractRecord.java @@ -63,6 +63,8 @@ import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.stream.Stream; +import java.util.stream.Stream; import org.jooq.Attachable; import org.jooq.Converter; @@ -539,6 +541,13 @@ abstract class AbstractRecord extends AbstractStore implements Record { return Arrays.asList(intoArray()); } + + @Override + public final Stream intoStream() { + return into(Stream.class); + } + + @Override public final Map intoMap() { Map map = new LinkedHashMap(); diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultRecordMapper.java b/jOOQ/src/main/java/org/jooq/impl/DefaultRecordMapper.java index ae4bb3cfa3..12dc3540d5 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultRecordMapper.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultRecordMapper.java @@ -72,6 +72,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.stream.Stream; import javax.persistence.Column; @@ -242,6 +243,7 @@ public class DefaultRecordMapper implements RecordMapper[] fields; + private final RecordType rowType; /** * The target type. @@ -273,6 +275,7 @@ public class DefaultRecordMapper implements RecordMapper rowType, Class type, E instance, Configuration configuration) { + this.rowType = rowType; this.fields = rowType.fields(); this.type = type; this.configuration = configuration; @@ -288,6 +291,14 @@ public class DefaultRecordMapper implements RecordMapper local = new DefaultRecordMapper<>(rowType, Object[].class, configuration); + delegate = r -> (E) Stream.of(local.map(r)); + return; + } + + // [#3212] [#5154] "Value types" can be mapped from single-field Record1 // types for convenience if (type.isPrimitive()