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 06:26:10 UTC

[groovy] branch master updated: Trivial refactoring: remove duplicated code

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 491b090  Trivial refactoring: remove duplicated code
491b090 is described below

commit 491b090adf44c6afb6ee8c2057bdb252decd32d4
Author: Daniel Sun <su...@apache.org>
AuthorDate: Sat Dec 12 14:18:52 2020 +0800

    Trivial refactoring: remove duplicated code
---
 .../collection/runtime/QueryableCollection.java    | 33 +++++++++-------------
 1 file changed, 14 insertions(+), 19 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 d0ad714..a73c276 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
@@ -104,16 +104,7 @@ class QueryableCollection<T> implements Queryable<T>, Serializable {
                     hashTableHolder.getObject(hashTableSupplier);
 
             // probe the hash table
-            final Object otherFields = fieldsExtractor1.apply(p);
-            return hashTable.entrySet().stream()
-                    .filter(entry -> hash(otherFields).equals(entry.getKey()))
-                    .flatMap(entry -> {
-                        List<U> candidateList = entry.getValue();
-                        return candidateList.stream()
-                                .filter(c -> Objects.equals(otherFields, fieldsExtractor2.apply(c)))
-                                .map(c -> tuple(p, c));
-                    });
-
+            return probeHashTable(hashTable, p, fieldsExtractor1, fieldsExtractor2);
         });
 
         return from(stream);
@@ -389,17 +380,9 @@ class QueryableCollection<T> implements Queryable<T>, Serializable {
                     hashTableHolder.getObject(hashTableSupplier);
 
             // probe the hash table
-            final Object otherFields = fieldsExtractor1.apply(p);
             List<Tuple2<T, U>> joinResultList =
                     null == p ? Collections.emptyList()
-                                : hashTable.entrySet().stream()
-                                            .filter(entry -> hash(otherFields).equals(entry.getKey()))
-                                            .flatMap(entry -> {
-                                                List<U> candidateList = entry.getValue();
-                                                return candidateList.stream()
-                                                        .filter(c -> Objects.equals(otherFields, fieldsExtractor2.apply(c)))
-                                                        .map(c -> tuple((T) p, (U) c));
-                                            }).collect(Collectors.toList());
+                                : probeHashTable(hashTable, (T) p, fieldsExtractor1, fieldsExtractor2).collect(Collectors.toList());
 
             return joinResultList.isEmpty() ? Stream.of(tuple(p, null)) : joinResultList.stream();
         });
@@ -407,6 +390,18 @@ class QueryableCollection<T> implements Queryable<T>, Serializable {
         return from(stream);
     }
 
+    private static <T, U> Stream<Tuple2<T, U>> probeHashTable(Map<Integer, List<U>> hashTable, T p, Function<? super T, ?> fieldsExtractor1, Function<? super U, ?> fieldsExtractor2) {
+        final Object otherFields = fieldsExtractor1.apply(p);
+        return hashTable.entrySet().stream()
+                .filter(entry -> hash(otherFields).equals(entry.getKey()))
+                .flatMap(entry -> {
+                    List<U> candidateList = entry.getValue();
+                    return candidateList.stream()
+                            .filter(c -> Objects.equals(otherFields, fieldsExtractor2.apply(c)))
+                            .map(c -> tuple(p, c));
+                });
+    }
+
     @Override
     public List<T> toList() {
         if (sourceIterable instanceof List) {