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);