You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2020/12/12 02:31:18 UTC
[groovy] branch master updated: Tweak outer join
This is an automated email from the ASF dual-hosted git repository.
sunlan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/master by this push:
new 1fb2ab5 Tweak outer join
1fb2ab5 is described below
commit 1fb2ab53ff9b1966d4ce681d65584fb15e95d923
Author: Daniel Sun <su...@apache.org>
AuthorDate: Sat Dec 12 10:30:13 2020 +0800
Tweak outer join
---
.../collection/runtime/QueryableCollection.java | 31 ++++++----------------
1 file changed, 8 insertions(+), 23 deletions(-)
diff --git a/subprojects/groovy-ginq/src/main/groovy/org/apache/groovy/ginq/provider/collection/runtime/QueryableCollection.java b/subprojects/groovy-ginq/src/main/groovy/org/apache/groovy/ginq/provider/collection/runtime/QueryableCollection.java
index 00602e8..59cbd7e 100644
--- a/subprojects/groovy-ginq/src/main/groovy/org/apache/groovy/ginq/provider/collection/runtime/QueryableCollection.java
+++ b/subprojects/groovy-ginq/src/main/groovy/org/apache/groovy/ginq/provider/collection/runtime/QueryableCollection.java
@@ -341,29 +341,14 @@ class QueryableCollection<T> implements Queryable<T>, Serializable {
((QueryableCollection) queryable2).makeReusable();
}
- return queryable2.stream()
- .map(c -> joiner.test(p, c) ? c : null)
- .reduce(new ArrayList<U>(), (r, e) -> {
- int size = r.size();
- if (0 == size) {
- r.add(e);
- return r;
- }
-
- int lastIndex = size - 1;
- Object lastElement = r.get(lastIndex);
-
- if (null != e) {
- if (null == lastElement) {
- r.set(lastIndex, e);
- } else {
- r.add(e);
- }
- }
-
- return r;
- }, (i, o) -> o).stream()
- .map(c -> null == c ? tuple(p, null) : tuple(p, c));
+ List<Tuple2<T, U>> joinResultList =
+ null == p ? Collections.emptyList()
+ : queryable2.stream()
+ .filter(c -> joiner.test(p, c))
+ .map(c -> tuple((T) p, (U) c))
+ .collect(Collectors.toList());
+
+ return joinResultList.isEmpty() ? Stream.of(tuple(p, null)) : joinResultList.stream();
});
return from(stream);