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 <matth...@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-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org