You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2022/09/24 14:08:32 UTC

[commons-text] 02/04: Better use of Stream and Map APIs

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

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-text.git

commit 834adcb761a92700f7f2d6ecb45ff77bebf28384
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Sat Sep 24 09:33:19 2022 -0400

    Better use of Stream and Map APIs
    
    Make some package private types final
---
 .../org/apache/commons/text/AlphabetConverter.java | 29 ++++++++------------
 .../apache/commons/text/ExtendedMessageFormat.java |  7 +----
 .../java/org/apache/commons/text/StrBuilder.java   |  4 +--
 .../org/apache/commons/text/diff/EditScript.java   |  4 +--
 .../text/lookup/InterpolatorStringLookup.java      |  9 ++----
 .../apache/commons/text/similarity/Counter.java    |  9 ++----
 .../text/similarity/IntersectionSimilarity.java    | 32 ++++++++++------------
 .../commons/text/similarity/RegexTokenizer.java    |  2 +-
 .../text/translate/AggregateTranslator.java        |  8 ++----
 .../commons/text/translate/EntityArrays.java       |  8 ++----
 10 files changed, 42 insertions(+), 70 deletions(-)

diff --git a/src/main/java/org/apache/commons/text/AlphabetConverter.java b/src/main/java/org/apache/commons/text/AlphabetConverter.java
index bad9460d..605d32ac 100644
--- a/src/main/java/org/apache/commons/text/AlphabetConverter.java
+++ b/src/main/java/org/apache/commons/text/AlphabetConverter.java
@@ -264,16 +264,13 @@ public final class AlphabetConverter {
      * @return The reconstructed AlphabetConverter
      * @see AlphabetConverter#getOriginalToEncoded()
      */
-    public static AlphabetConverter createConverterFromMap(
-            final Map<Integer, String> originalToEncoded) {
-        final Map<Integer, String> unmodifiableOriginalToEncoded =
-                Collections.unmodifiableMap(originalToEncoded);
+    public static AlphabetConverter createConverterFromMap(final Map<Integer, String> originalToEncoded) {
+        final Map<Integer, String> unmodifiableOriginalToEncoded = Collections.unmodifiableMap(originalToEncoded);
         final Map<String, String> encodedToOriginal = new LinkedHashMap<>();
 
         int encodedLetterLength = 1;
 
-        for (final Entry<Integer, String> e
-                : unmodifiableOriginalToEncoded.entrySet()) {
+        for (final Entry<Integer, String> e : unmodifiableOriginalToEncoded.entrySet()) {
             final String originalAsString = codePointToString(e.getKey());
             encodedToOriginal.put(e.getValue(), originalAsString);
 
@@ -282,9 +279,7 @@ public final class AlphabetConverter {
             }
         }
 
-        return new AlphabetConverter(unmodifiableOriginalToEncoded,
-                encodedToOriginal,
-                encodedLetterLength);
+        return new AlphabetConverter(unmodifiableOriginalToEncoded, encodedToOriginal, encodedLetterLength);
     }
 
     /**
@@ -508,14 +503,14 @@ public final class AlphabetConverter {
     @Override
     public String toString() {
         final StringBuilder sb = new StringBuilder();
-
-        for (final Entry<Integer, String> entry
-                : originalToEncoded.entrySet()) {
-            sb.append(codePointToString(entry.getKey()))
-                    .append(ARROW)
-                    .append(entry.getValue()).append(System.lineSeparator());
-        }
-
+        // @formatter:off
+        originalToEncoded.forEach((k, v) -> {
+            sb.append(codePointToString(k))
+              .append(ARROW)
+              .append(k)
+              .append(System.lineSeparator());
+        });
+        // @formatter:on
         return sb.toString();
     }
 }
diff --git a/src/main/java/org/apache/commons/text/ExtendedMessageFormat.java b/src/main/java/org/apache/commons/text/ExtendedMessageFormat.java
index 6b42afe7..1e149408 100644
--- a/src/main/java/org/apache/commons/text/ExtendedMessageFormat.java
+++ b/src/main/java/org/apache/commons/text/ExtendedMessageFormat.java
@@ -289,12 +289,7 @@ public class ExtendedMessageFormat extends MessageFormat {
         if (coll == null || coll.isEmpty()) {
             return false;
         }
-        for (final Object name : coll) {
-            if (name != null) {
-                return true;
-            }
-        }
-        return false;
+        return coll.stream().anyMatch(Objects::nonNull);
     }
 
     /**
diff --git a/src/main/java/org/apache/commons/text/StrBuilder.java b/src/main/java/org/apache/commons/text/StrBuilder.java
index f0c0099d..ef9b0176 100644
--- a/src/main/java/org/apache/commons/text/StrBuilder.java
+++ b/src/main/java/org/apache/commons/text/StrBuilder.java
@@ -767,9 +767,7 @@ public class StrBuilder implements CharSequence, Appendable, Serializable, Build
      */
     public StrBuilder appendAll(final Iterable<?> iterable) {
         if (iterable != null) {
-            for (final Object o : iterable) {
-                append(o);
-            }
+            iterable.forEach(this::append);
         }
         return this;
     }
diff --git a/src/main/java/org/apache/commons/text/diff/EditScript.java b/src/main/java/org/apache/commons/text/diff/EditScript.java
index 60de7136..06e8a1c3 100644
--- a/src/main/java/org/apache/commons/text/diff/EditScript.java
+++ b/src/main/java/org/apache/commons/text/diff/EditScript.java
@@ -127,9 +127,7 @@ public class EditScript<T> {
      * @param visitor  the visitor that will visit all commands in turn
      */
     public void visit(final CommandVisitor<T> visitor) {
-        for (final EditCommand<T> command : commands) {
-            command.accept(visitor);
-        }
+        commands.forEach(command -> command.accept(visitor));
     }
 
 }
diff --git a/src/main/java/org/apache/commons/text/lookup/InterpolatorStringLookup.java b/src/main/java/org/apache/commons/text/lookup/InterpolatorStringLookup.java
index 72b36c31..c78e0017 100644
--- a/src/main/java/org/apache/commons/text/lookup/InterpolatorStringLookup.java
+++ b/src/main/java/org/apache/commons/text/lookup/InterpolatorStringLookup.java
@@ -17,9 +17,9 @@
 package org.apache.commons.text.lookup;
 
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.stream.Collectors;
 
 /**
  * Proxies other {@link StringLookup}s using a keys within ${} markers using the format "${StringLookup:Key}".
@@ -63,12 +63,9 @@ class InterpolatorStringLookup extends AbstractStringLookup {
      * @param addDefaultLookups whether the default lookups should be used.
      */
     InterpolatorStringLookup(final Map<String, StringLookup> stringLookupMap, final StringLookup defaultStringLookup,
-        final boolean addDefaultLookups) {
+            final boolean addDefaultLookups) {
         this.defaultStringLookup = defaultStringLookup;
-        this.stringLookupMap = new HashMap<>(stringLookupMap.size());
-        for (final Entry<String, StringLookup> entry : stringLookupMap.entrySet()) {
-            this.stringLookupMap.put(StringLookupFactory.toKey(entry.getKey()), entry.getValue());
-        }
+        this.stringLookupMap = stringLookupMap.entrySet().stream().collect(Collectors.toMap(e -> StringLookupFactory.toKey(e.getKey()), Entry::getValue));
         if (addDefaultLookups) {
             StringLookupFactory.INSTANCE.addDefaultStringLookups(this.stringLookupMap);
         }
diff --git a/src/main/java/org/apache/commons/text/similarity/Counter.java b/src/main/java/org/apache/commons/text/similarity/Counter.java
index b49a1b30..b73a763a 100644
--- a/src/main/java/org/apache/commons/text/similarity/Counter.java
+++ b/src/main/java/org/apache/commons/text/similarity/Counter.java
@@ -33,7 +33,7 @@ import java.util.Map;
 final class Counter {
 
     /**
-     * It counts how many times each element provided occurred in an array and
+     * Counts how many times each element provided occurred in an array and
      * returns a dict with the element as key and the count as value.
      *
      * @param tokens array of tokens
@@ -42,12 +42,7 @@ final class Counter {
     public static Map<CharSequence, Integer> of(final CharSequence[] tokens) {
         final Map<CharSequence, Integer> innerCounter = new HashMap<>();
         for (final CharSequence token : tokens) {
-            if (innerCounter.containsKey(token)) {
-                int value = innerCounter.get(token);
-                innerCounter.put(token, ++value);
-            } else {
-                innerCounter.put(token, 1);
-            }
+            innerCounter.put(token, innerCounter.containsKey(token) ? innerCounter.get(token) + 1 : 1);
         }
         return innerCounter;
     }
diff --git a/src/main/java/org/apache/commons/text/similarity/IntersectionSimilarity.java b/src/main/java/org/apache/commons/text/similarity/IntersectionSimilarity.java
index b3bd4f34..496af222 100644
--- a/src/main/java/org/apache/commons/text/similarity/IntersectionSimilarity.java
+++ b/src/main/java/org/apache/commons/text/similarity/IntersectionSimilarity.java
@@ -36,12 +36,21 @@ import java.util.function.Function;
  * @see HashMap
  */
 public class IntersectionSimilarity<T> implements SimilarityScore<IntersectionResult> {
+
     /**
      * Mutable counter class for storing the count of elements.
      */
-    private static class BagCount {
-        /** The count. This is initialized to 1 upon construction. */
-        int count = 1;
+    private static final class BagCount {
+
+        /** Private, mutable but must be used as immutable. */
+        private static final BagCount ZERO = new BagCount();
+
+        private BagCount() {
+            this.count = 0;
+        }
+
+        /** The count. */
+        int count;
     }
 
     // The following is adapted from commons-collections for a Bag.
@@ -73,12 +82,7 @@ public class IntersectionSimilarity<T> implements SimilarityScore<IntersectionRe
          * @param object the object to add
          */
         void add(final T object) {
-            final BagCount mut = map.get(object);
-            if (mut == null) {
-                map.put(object, new BagCount());
-            } else {
-                mut.count++;
-            }
+            map.computeIfAbsent(object, k -> new BagCount()).count++;
         }
 
         /**
@@ -98,11 +102,7 @@ public class IntersectionSimilarity<T> implements SimilarityScore<IntersectionRe
          * @return The number of occurrences of the object, zero if not found
          */
         int getCount(final Object object) {
-            final BagCount count = map.get(object);
-            if (count != null) {
-                return count.count;
-            }
-            return 0;
+            return map.getOrDefault(object, BagCount.ZERO).count;
         }
 
         /**
@@ -231,9 +231,7 @@ public class IntersectionSimilarity<T> implements SimilarityScore<IntersectionRe
      */
     private TinyBag toBag(final Collection<T> objects) {
         final TinyBag bag = new TinyBag(objects.size());
-        for (final T t : objects) {
-            bag.add(t);
-        }
+        objects.forEach(bag::add);
         return bag;
     }
 }
diff --git a/src/main/java/org/apache/commons/text/similarity/RegexTokenizer.java b/src/main/java/org/apache/commons/text/similarity/RegexTokenizer.java
index af5a5a97..213e01c7 100644
--- a/src/main/java/org/apache/commons/text/similarity/RegexTokenizer.java
+++ b/src/main/java/org/apache/commons/text/similarity/RegexTokenizer.java
@@ -32,7 +32,7 @@ import org.apache.commons.lang3.Validate;
  *
  * @since 1.0
  */
-class RegexTokenizer implements Tokenizer<CharSequence> {
+final class RegexTokenizer implements Tokenizer<CharSequence> {
 
     /** The whitespace pattern. */
     private static final Pattern PATTERN = Pattern.compile("(\\w)+");
diff --git a/src/main/java/org/apache/commons/text/translate/AggregateTranslator.java b/src/main/java/org/apache/commons/text/translate/AggregateTranslator.java
index 53d404f6..e13fa576 100644
--- a/src/main/java/org/apache/commons/text/translate/AggregateTranslator.java
+++ b/src/main/java/org/apache/commons/text/translate/AggregateTranslator.java
@@ -20,6 +20,8 @@ import java.io.IOException;
 import java.io.Writer;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
+import java.util.stream.Stream;
 
 /**
  * Executes a sequence of translators one after the other. Execution ends whenever
@@ -41,11 +43,7 @@ public class AggregateTranslator extends CharSequenceTranslator {
      */
     public AggregateTranslator(final CharSequenceTranslator... translators) {
         if (translators != null) {
-            for (final CharSequenceTranslator translator : translators) {
-                if (translator != null) {
-                    this.translators.add(translator);
-                }
-            }
+            Stream.of(translators).filter(Objects::nonNull).forEach(this.translators::add);
         }
     }
 
diff --git a/src/main/java/org/apache/commons/text/translate/EntityArrays.java b/src/main/java/org/apache/commons/text/translate/EntityArrays.java
index 73f9e473..6420af5b 100644
--- a/src/main/java/org/apache/commons/text/translate/EntityArrays.java
+++ b/src/main/java/org/apache/commons/text/translate/EntityArrays.java
@@ -19,6 +19,8 @@ package org.apache.commons.text.translate;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Map.Entry;
+import java.util.stream.Collectors;
 
 /**
  * Class holding various entity data for HTML and XML - generally for use with
@@ -442,11 +444,7 @@ public class EntityArrays {
      * @return Map&lt;String, String&gt; inverted array
      */
     public static Map<CharSequence, CharSequence> invert(final Map<CharSequence, CharSequence> map) {
-        final Map<CharSequence, CharSequence> newMap = new HashMap<>();
-        for (final Map.Entry<CharSequence, CharSequence> pair : map.entrySet()) {
-            newMap.put(pair.getValue(), pair.getKey());
-        }
-        return newMap;
+        return map.entrySet().stream().collect(Collectors.toMap(Entry::getValue, Entry::getKey));
     }
 
 }