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 30aa87eb668e26653e86bc90164f7e1770ae2ec5 Author: Benoit Tellier <[email protected]> AuthorDate: Thu May 20 08:51:12 2021 +0700 [PERFORMANCE] Keywords::fromFlags should avoid intermediate collections --- .../apache/james/jmap/draft/model/Keywords.java | 28 +++++++++++----------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/Keywords.java b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/Keywords.java index 0d5749a..0debde4 100644 --- a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/Keywords.java +++ b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/Keywords.java @@ -65,13 +65,13 @@ public class Keywords { public static class KeywordsFactory { @FunctionalInterface interface KeywordsValidator { - KeywordsValidator THROW_ON_IMAP_NON_EXPOSED_KEYWORDS = keywords -> Preconditions.checkArgument( - keywords.stream().allMatch(Keyword::isExposedImapKeyword), + KeywordsValidator THROW_ON_IMAP_NON_EXPOSED_KEYWORDS = keyword -> Preconditions.checkArgument( + keyword.isExposedImapKeyword(), "Does not allow to update 'Deleted' or 'Recent' flag"); - KeywordsValidator IGNORE_NON_EXPOSED_IMAP_KEYWORDS = keywords -> { }; + KeywordsValidator IGNORE_NON_EXPOSED_IMAP_KEYWORDS = keyword -> { }; - void validate(Set<Keyword> keywords); + void validate(Keyword keywords); } @FunctionalInterface @@ -109,22 +109,23 @@ public class Keywords { } public Keywords fromSet(Set<Keyword> setKeywords) { - validator.validate(setKeywords); + return fromStream(setKeywords.stream()); + } - return new Keywords(setKeywords.stream() + public Keywords fromStream(Stream<Keyword> keywordStream) { + return new Keywords(keywordStream + .peek(validator::validate) .filter(filter) .collect(Guavate.toImmutableSet())); } public Keywords from(Keyword... keywords) { - return fromSet(Arrays.stream(keywords) - .collect(Guavate.toImmutableSet())); + return fromStream(Arrays.stream(keywords)); } public Keywords fromCollection(Collection<String> keywords) { - return fromSet(keywords.stream() - .flatMap(toKeyword::asKeywordStream) - .collect(Guavate.toImmutableSet())); + return fromStream(keywords.stream() + .flatMap(toKeyword::asKeywordStream)); } @VisibleForTesting @@ -137,12 +138,11 @@ public class Keywords { } public Keywords fromFlags(Flags flags) { - return fromSet(Stream.concat( + return fromStream(Stream.concat( Stream.of(flags.getUserFlags()) .flatMap(toKeyword::asKeywordStream), Stream.of(flags.getSystemFlags()) - .map(Keyword::fromFlag)) - .collect(Guavate.toImmutableSet())); + .map(Keyword::fromFlag))); } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
