You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2019/11/15 02:41:36 UTC

[james-project] 27/30: [Refactoring] replace Iterator by Stream in API

This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 6eab7556b22b86ccf092e3cfa8f995d21a871f69
Author: Matthieu Baechler <ma...@apache.org>
AuthorDate: Wed Nov 13 16:36:32 2019 +0100

    [Refactoring] replace Iterator by Stream in API
---
 .../mailrepository/file/FileMailRepository.java    | 40 +++++++++-------------
 .../james/repository/api/ObjectRepository.java     |  4 +--
 .../james/repository/api/StreamRepository.java     |  4 +--
 .../repository/file/AbstractFileRepository.java    |  8 ++---
 4 files changed, 24 insertions(+), 32 deletions(-)

diff --git a/server/data/data-file/src/main/java/org/apache/james/mailrepository/file/FileMailRepository.java b/server/data/data-file/src/main/java/org/apache/james/mailrepository/file/FileMailRepository.java
index 8d71e69..93107f8 100644
--- a/server/data/data-file/src/main/java/org/apache/james/mailrepository/file/FileMailRepository.java
+++ b/server/data/data-file/src/main/java/org/apache/james/mailrepository/file/FileMailRepository.java
@@ -27,6 +27,8 @@ import java.util.Collections;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import javax.annotation.PostConstruct;
 import javax.inject.Inject;
@@ -51,7 +53,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.github.fge.lambdas.Throwing;
-import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterators;
 
 /**
@@ -152,14 +153,9 @@ public class FileMailRepository implements MailRepository, Configurable, Initial
             }
 
             // Finds non-matching pairs and deletes the extra files
-            HashSet<String> streamKeys = new HashSet<>();
-            for (Iterator<String> i = streamRepository.list(); i.hasNext(); ) {
-                streamKeys.add(i.next());
-            }
-            HashSet<String> objectKeys = new HashSet<>();
-            for (Iterator<String> i = objectRepository.list(); i.hasNext(); ) {
-                objectKeys.add(i.next());
-            }
+
+            HashSet<String> streamKeys = streamRepository.list().collect(Collectors.toCollection(HashSet::new));
+            HashSet<String> objectKeys = objectRepository.list().collect(Collectors.toCollection(HashSet::new));
 
             @SuppressWarnings("unchecked")
             Collection<String> strandedStreams = (Collection<String>) streamKeys.clone();
@@ -181,9 +177,7 @@ public class FileMailRepository implements MailRepository, Configurable, Initial
                 // Next get a list from the object repository
                 // and use that for the list of keys
                 keys.clear();
-                for (Iterator<String> i = objectRepository.list(); i.hasNext(); ) {
-                    keys.add(i.next());
-                }
+                objectRepository.list().forEach(keys::add);
             }
             LOGGER.debug("{} created in {}", getClass().getName(), destination);
         } catch (Exception e) {
@@ -313,9 +307,7 @@ public class FileMailRepository implements MailRepository, Configurable, Initial
 
     @Override
     public void remove(Collection<Mail> mails) throws MessagingException {
-        for (Mail mail : mails) {
-            remove(mail);
-        }
+        mails.forEach(Throwing.<Mail>consumer(this::remove).sneakyThrow());
     }
 
     @Override
@@ -338,7 +330,7 @@ public class FileMailRepository implements MailRepository, Configurable, Initial
 
     @Override
     public void removeAll() {
-        ImmutableList.copyOf(list())
+        listStream()
             .forEach(Throwing.<MailKey>consumer(this::remove).sneakyThrow());
     }
 
@@ -352,6 +344,11 @@ public class FileMailRepository implements MailRepository, Configurable, Initial
 
     @Override
     public Iterator<MailKey> list() {
+        return listStream()
+            .iterator();
+    }
+
+    private Stream<MailKey> listStream() {
         // Fix ConcurrentModificationException by cloning
         // the keyset before getting an iterator
         final ArrayList<String> clone;
@@ -360,17 +357,14 @@ public class FileMailRepository implements MailRepository, Configurable, Initial
                 clone = new ArrayList<>(keys);
             }
         } else {
-            clone = new ArrayList<>();
-            for (Iterator<String> i = objectRepository.list(); i.hasNext(); ) {
-                clone.add(i.next());
-            }
+            clone = objectRepository.list().collect(Collectors.toCollection(ArrayList::new));
         }
         if (fifo) {
             Collections.sort(clone); // Keys is a HashSet; impose FIFO for apps
         }
         // that need it
-        return clone.stream()
-            .map(MailKey::new)
-            .iterator();
+        return clone
+            .stream()
+            .map(MailKey::new);
     }
 }
diff --git a/server/data/data-library/src/main/java/org/apache/james/repository/api/ObjectRepository.java b/server/data/data-library/src/main/java/org/apache/james/repository/api/ObjectRepository.java
index 3ed3661..d4631bd 100644
--- a/server/data/data-library/src/main/java/org/apache/james/repository/api/ObjectRepository.java
+++ b/server/data/data-library/src/main/java/org/apache/james/repository/api/ObjectRepository.java
@@ -19,7 +19,7 @@
 
 package org.apache.james.repository.api;
 
-import java.util.Iterator;
+import java.util.stream.Stream;
 
 public interface ObjectRepository extends Repository {
 
@@ -29,7 +29,7 @@ public interface ObjectRepository extends Repository {
 
     Object get(String key, ClassLoader loader);
 
-    Iterator<String> list();
+    Stream<String> list();
 
     void put(String key, Object value);
 
diff --git a/server/data/data-library/src/main/java/org/apache/james/repository/api/StreamRepository.java b/server/data/data-library/src/main/java/org/apache/james/repository/api/StreamRepository.java
index b6d6065..4358aa9 100644
--- a/server/data/data-library/src/main/java/org/apache/james/repository/api/StreamRepository.java
+++ b/server/data/data-library/src/main/java/org/apache/james/repository/api/StreamRepository.java
@@ -21,13 +21,13 @@ package org.apache.james.repository.api;
 
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.util.Iterator;
+import java.util.stream.Stream;
 
 public interface StreamRepository extends Repository {
 
     InputStream get(String key);
 
-    Iterator<String> list();
+    Stream<String> list();
 
     OutputStream put(String key);
 
diff --git a/server/data/data-library/src/main/java/org/apache/james/repository/file/AbstractFileRepository.java b/server/data/data-library/src/main/java/org/apache/james/repository/file/AbstractFileRepository.java
index 5f8d22f..23486c9 100644
--- a/server/data/data-library/src/main/java/org/apache/james/repository/file/AbstractFileRepository.java
+++ b/server/data/data-library/src/main/java/org/apache/james/repository/file/AbstractFileRepository.java
@@ -28,7 +28,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.util.Arrays;
-import java.util.Iterator;
+import java.util.stream.Stream;
 
 import javax.annotation.PostConstruct;
 import javax.inject.Inject;
@@ -283,13 +283,11 @@ public abstract class AbstractFileRepository implements Repository, Configurable
     /**
      * Returns the list of used keys.
      */
-    public Iterator<String> list() {
+    public Stream<String> list() {
         final File storeDir = new File(baseDirectory.getAbsolutePath());
         final String[] names = storeDir.list(filter);
 
-        return Arrays.stream(names)
-            .map(this::decode)
-            .iterator();
+        return Arrays.stream(names).map(this::decode);
     }
 
     /**


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org