|
28 | 28 | import java.util.ArrayList; |
29 | 29 | import java.util.Iterator; |
30 | 30 | import java.util.List; |
| 31 | +import java.util.function.Consumer; |
31 | 32 | import java.util.function.Function; |
32 | 33 | import java.util.stream.Collectors; |
33 | 34 | import java.util.stream.Stream; |
@@ -62,38 +63,38 @@ static <T> Value createUntypedStringValue(T value) { |
62 | 63 | com.google.protobuf.Value.newBuilder().setStringValue(String.valueOf(value)).build()); |
63 | 64 | } |
64 | 65 |
|
65 | | - @SuppressWarnings("unchecked") |
66 | 66 | static <T, U> Iterable<U> convertToTypedIterable( |
67 | 67 | Function<T, U> func, T val, Iterator<?> iterator) { |
68 | 68 | List<U> values = new ArrayList<>(); |
69 | | - values.add(func.apply(val)); |
70 | | - iterator.forEachRemaining(value -> values.add(func.apply((T) value))); |
| 69 | + SpannerTypeConverter.processIterable(val, iterator, func, values::add); |
71 | 70 | return values; |
72 | 71 | } |
73 | 72 |
|
74 | 73 | static <T> Iterable<T> convertToTypedIterable(T val, Iterator<?> iterator) { |
75 | 74 | return convertToTypedIterable(v -> v, val, iterator); |
76 | 75 | } |
77 | 76 |
|
| 77 | + @SuppressWarnings("unchecked") |
| 78 | + static <T, U> void processIterable( |
| 79 | + T val, Iterator<?> iterator, Function<T, U> func, Consumer<U> consumer) { |
| 80 | + consumer.accept(func.apply(val)); |
| 81 | + iterator.forEachRemaining(values -> consumer.accept(func.apply((T) values))); |
| 82 | + } |
| 83 | + |
78 | 84 | static Date convertLocalDateToSpannerDate(LocalDate date) { |
79 | 85 | return Date.fromYearMonthDay(date.getYear(), date.getMonthValue(), date.getDayOfMonth()); |
80 | 86 | } |
81 | 87 |
|
82 | 88 | static <T> Value createUntypedIterableValue( |
83 | 89 | T value, Iterator<?> iterator, Function<T, String> func) { |
| 90 | + ListValue.Builder listValueBuilder = ListValue.newBuilder(); |
| 91 | + SpannerTypeConverter.processIterable( |
| 92 | + value, |
| 93 | + iterator, |
| 94 | + (val) -> com.google.protobuf.Value.newBuilder().setStringValue(func.apply(val)).build(), |
| 95 | + listValueBuilder::addValues); |
84 | 96 | return Value.untyped( |
85 | | - com.google.protobuf.Value.newBuilder() |
86 | | - .setListValue( |
87 | | - ListValue.newBuilder() |
88 | | - .addAllValues( |
89 | | - SpannerTypeConverter.convertToTypedIterable( |
90 | | - (val) -> |
91 | | - com.google.protobuf.Value.newBuilder() |
92 | | - .setStringValue(func.apply(val)) |
93 | | - .build(), |
94 | | - value, |
95 | | - iterator))) |
96 | | - .build()); |
| 97 | + com.google.protobuf.Value.newBuilder().setListValue(listValueBuilder.build()).build()); |
97 | 98 | } |
98 | 99 |
|
99 | 100 | static ZonedDateTime atUTC(LocalDateTime localDateTime) { |
|
0 commit comments