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<String, String> 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));
}
}