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