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/08/12 18:36:10 UTC

[commons-lang] branch master updated (6a95f03a6 -> 717f163a6)

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

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


    from 6a95f03a6 Sort members
     new 39f08ac62 StringUtils.join(Iterator, String) should only return null when the Iterator is null
     new ec93f3b7f StringUtils.join(Iterator, String) should only return null when the Iterator is null
     new 717f163a6 Add Streams.of(Iterator)

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 src/changes/changes.xml                            |  4 +-
 .../java/org/apache/commons/lang3/StringUtils.java | 61 +++-------------------
 .../org/apache/commons/lang3/stream/Streams.java   | 14 +++++
 .../org/apache/commons/lang3/StringUtilsTest.java  |  3 +-
 .../apache/commons/lang3/stream/StreamsTest.java   | 12 +++++
 5 files changed, 37 insertions(+), 57 deletions(-)


[commons-lang] 03/03: Add Streams.of(Iterator)

Posted by gg...@apache.org.
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-lang.git

commit 717f163a6df989499dc5df2f1de2e1b6a23ba1e8
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Fri Aug 12 14:36:02 2022 -0400

    Add Streams.of(Iterator)
---
 .../java/org/apache/commons/lang3/StringUtils.java | 39 +++-------------------
 .../org/apache/commons/lang3/stream/Streams.java   | 14 ++++++++
 .../apache/commons/lang3/stream/StreamsTest.java   | 12 +++++++
 3 files changed, 30 insertions(+), 35 deletions(-)

diff --git a/src/main/java/org/apache/commons/lang3/StringUtils.java b/src/main/java/org/apache/commons/lang3/StringUtils.java
index 573b652fd..b1f198fb1 100644
--- a/src/main/java/org/apache/commons/lang3/StringUtils.java
+++ b/src/main/java/org/apache/commons/lang3/StringUtils.java
@@ -29,11 +29,11 @@ import java.util.Objects;
 import java.util.Set;
 import java.util.function.Supplier;
 import java.util.regex.Pattern;
-import java.util.stream.Stream;
 
 import org.apache.commons.lang3.function.Suppliers;
 import org.apache.commons.lang3.function.ToBooleanBiFunction;
 import org.apache.commons.lang3.stream.LangCollectors;
+import org.apache.commons.lang3.stream.Streams;
 
 /**
  * <p>Operations on {@link java.lang.String} that are
@@ -124,8 +124,6 @@ import org.apache.commons.lang3.stream.LangCollectors;
 //@Immutable
 public class StringUtils {
 
-    private static final int STRING_BUILDER_SIZE = 256;
-
     // Performance testing notes (JDK 1.4, Jul03, scolebourne)
     // Whitespace:
     // Character.isWhitespace() is faster than WHITESPACE.indexOf()
@@ -4386,7 +4384,6 @@ public class StringUtils {
      * @since 2.0
      */
     public static String join(final Iterator<?> iterator, final char separator) {
-
         // handle null, zero and one elements before building a buffer
         if (iterator == null) {
             return null;
@@ -4394,22 +4391,7 @@ public class StringUtils {
         if (!iterator.hasNext()) {
             return EMPTY;
         }
-
-        // two or more elements
-        final StringBuilder buf = new StringBuilder(STRING_BUILDER_SIZE); // Java default is 16, probably too small
-
-        while (iterator.hasNext()) {
-            final Object obj = iterator.next();
-            if (obj != null) {
-                buf.append(obj);
-            }
-            if (iterator.hasNext()) {
-                buf.append(separator);
-            }
-
-        }
-
-        return buf.toString();
+        return Streams.of(iterator).collect(LangCollectors.joining(toStringOrEmpty(String.valueOf(separator)), EMPTY, EMPTY, StringUtils::toStringOrEmpty));
     }
 
     /**
@@ -4433,20 +4415,7 @@ public class StringUtils {
         if (!iterator.hasNext()) {
             return EMPTY;
         }
-
-        // two or more elements
-        final StringBuilder buf = new StringBuilder(STRING_BUILDER_SIZE); // Java default is 16, probably too small
-
-        while (iterator.hasNext()) {
-            final Object obj = iterator.next();
-            if (obj != null) {
-                buf.append(obj);
-            }
-            if (separator != null && iterator.hasNext()) {
-                buf.append(separator);
-            }
-        }
-        return buf.toString();
+        return Streams.of(iterator).collect(LangCollectors.joining(toStringOrEmpty(separator), EMPTY, EMPTY, StringUtils::toStringOrEmpty));
     }
 
     /**
@@ -4727,7 +4696,7 @@ public class StringUtils {
      * {@code endIndex > array.length()}
      */
     public static String join(final Object[] array, final String delimiter, final int startIndex, final int endIndex) {
-        return array != null ? Stream.of(array).skip(startIndex).limit(Math.max(0, endIndex - startIndex))
+        return array != null ? Streams.of(array).skip(startIndex).limit(Math.max(0, endIndex - startIndex))
             .collect(LangCollectors.joining(delimiter, EMPTY, EMPTY, StringUtils::toStringOrEmpty)) : null;
     }
 
diff --git a/src/main/java/org/apache/commons/lang3/stream/Streams.java b/src/main/java/org/apache/commons/lang3/stream/Streams.java
index ee576c723..6ae7d1aa4 100644
--- a/src/main/java/org/apache/commons/lang3/stream/Streams.java
+++ b/src/main/java/org/apache/commons/lang3/stream/Streams.java
@@ -20,10 +20,12 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Enumeration;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Objects;
 import java.util.Set;
 import java.util.Spliterator;
+import java.util.Spliterators;
 import java.util.Spliterators.AbstractSpliterator;
 import java.util.function.BiConsumer;
 import java.util.function.BinaryOperator;
@@ -653,6 +655,18 @@ public class Streams {
         return iterable == null ? Stream.empty() : StreamSupport.stream(iterable.spliterator(), false);
     }
 
+    /**
+     * Creates a stream on the given Iterator.
+     *
+     * @param <E> the type of elements in the Iterator.
+     * @param iterator the Iterator to stream or null.
+     * @return a new Stream or {@link Stream#empty()} if the Iterator is null.
+     * @since 3.13.0
+     */
+    public static <E> Stream<E> of(final Iterator<E> iterator) {
+        return iterator == null ? Stream.empty() : StreamSupport.stream(Spliterators.spliteratorUnknownSize(iterator, Spliterator.ORDERED), false);
+    }
+
     /**
      * Null-safe version of {@link Stream#of(Object[])}.
      *
diff --git a/src/test/java/org/apache/commons/lang3/stream/StreamsTest.java b/src/test/java/org/apache/commons/lang3/stream/StreamsTest.java
index 073e9cc71..c15f95999 100644
--- a/src/test/java/org/apache/commons/lang3/stream/StreamsTest.java
+++ b/src/test/java/org/apache/commons/lang3/stream/StreamsTest.java
@@ -31,6 +31,7 @@ import java.lang.reflect.UndeclaredThrowableException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Hashtable;
+import java.util.Iterator;
 import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -199,6 +200,17 @@ public class StreamsTest extends AbstractLangTest {
         assertEquals(0, Streams.of(input).collect(Collectors.toList()).size());
     }
 
+    @Test
+    public void testOfIteratorNotNull() {
+        assertEquals(2, Streams.of(Arrays.asList("A", "B").iterator()).collect(Collectors.toList()).size());
+    }
+
+    @Test
+    public void testOfIteratorNull() {
+        final Iterator<String> input = null;
+        assertEquals(0, Streams.of(input).collect(Collectors.toList()).size());
+    }
+
     @Test
     public void testSimpleStreamFilter() {
         final List<String> input = Arrays.asList("1", "2", "3", "4", "5", "6");


[commons-lang] 02/03: StringUtils.join(Iterator, String) should only return null when the Iterator is null

Posted by gg...@apache.org.
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-lang.git

commit ec93f3b7f59a6f6bc489bc3ffda932a6ca9fe6ca
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Fri Aug 12 14:30:09 2022 -0400

    StringUtils.join(Iterator, String) should only return null when the
    Iterator is null
---
 src/changes/changes.xml                                     |  1 +
 src/main/java/org/apache/commons/lang3/StringUtils.java     | 12 ++++--------
 src/test/java/org/apache/commons/lang3/StringUtilsTest.java |  1 +
 3 files changed, 6 insertions(+), 8 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 5d2d1f74a..0c20ea868 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -90,6 +90,7 @@ The <action> type attribute can be add,update,fix,remove.
     <action                   type="fix" dev="ggregory" due-to="guicaiyue">Javadoc: StringUtils.repeat("", "x", 3) = "xx"; #918.</action>
     <action                   type="fix" dev="ggregory" due-to="Marc Wrobel">Fix typos #920, #923.</action>
     <action                   type="fix" dev="ggregory" due-to="Bhimantoro Suryo Admodjo">Simplify condition #925.</action>
+    <action                   type="fix" dev="ggregory" due-to="Gary Gregory">StringUtils.join(Iterable, String) should only return null when the Iterable is null.</action>
     <action                   type="fix" dev="ggregory" due-to="Gary Gregory">StringUtils.join(Iterator, String) should only return null when the Iterator is null.</action>
     <!-- ADD -->
     <action                   type="add" dev="ggregory" due-to="Gary Gregory">Add GitHub coverage.yml.</action>
diff --git a/src/main/java/org/apache/commons/lang3/StringUtils.java b/src/main/java/org/apache/commons/lang3/StringUtils.java
index b316b1468..573b652fd 100644
--- a/src/main/java/org/apache/commons/lang3/StringUtils.java
+++ b/src/main/java/org/apache/commons/lang3/StringUtils.java
@@ -4394,23 +4394,19 @@ public class StringUtils {
         if (!iterator.hasNext()) {
             return EMPTY;
         }
-        final Object first = iterator.next();
-        if (!iterator.hasNext()) {
-            return toStringOrEmpty(first);
-        }
 
         // two or more elements
         final StringBuilder buf = new StringBuilder(STRING_BUILDER_SIZE); // Java default is 16, probably too small
-        if (first != null) {
-            buf.append(first);
-        }
 
         while (iterator.hasNext()) {
-            buf.append(separator);
             final Object obj = iterator.next();
             if (obj != null) {
                 buf.append(obj);
             }
+            if (iterator.hasNext()) {
+                buf.append(separator);
+            }
+
         }
 
         return buf.toString();
diff --git a/src/test/java/org/apache/commons/lang3/StringUtilsTest.java b/src/test/java/org/apache/commons/lang3/StringUtilsTest.java
index 4ef061b91..bc5aeef80 100644
--- a/src/test/java/org/apache/commons/lang3/StringUtilsTest.java
+++ b/src/test/java/org/apache/commons/lang3/StringUtilsTest.java
@@ -1292,6 +1292,7 @@ public class StringUtilsTest extends AbstractLangTest {
         assertEquals("", StringUtils.join(Arrays.asList(NULL_ARRAY_LIST).iterator(), SEPARATOR_CHAR));
         assertEquals("", StringUtils.join(Arrays.asList(EMPTY_ARRAY_LIST).iterator(), SEPARATOR_CHAR));
         assertEquals("foo", StringUtils.join(Collections.singleton("foo").iterator(), 'x'));
+        assertEquals("null", StringUtils.join(Arrays.asList(NULL_TO_STRING_LIST).iterator(), SEPARATOR_CHAR));
     }
 
     @Test


[commons-lang] 01/03: StringUtils.join(Iterator, String) should only return null when the Iterator is null

Posted by gg...@apache.org.
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-lang.git

commit 39f08ac62fc4e51b1c5bcc93ae2b12d4033bd05e
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Fri Aug 12 14:14:47 2022 -0400

    StringUtils.join(Iterator, String) should only return null when the
    Iterator is null
---
 src/changes/changes.xml                            |  3 ++-
 .../java/org/apache/commons/lang3/StringUtils.java | 24 +++++-----------------
 .../org/apache/commons/lang3/StringUtilsTest.java  |  2 +-
 3 files changed, 8 insertions(+), 21 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index f1f71c10d..5d2d1f74a 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -90,6 +90,7 @@ The <action> type attribute can be add,update,fix,remove.
     <action                   type="fix" dev="ggregory" due-to="guicaiyue">Javadoc: StringUtils.repeat("", "x", 3) = "xx"; #918.</action>
     <action                   type="fix" dev="ggregory" due-to="Marc Wrobel">Fix typos #920, #923.</action>
     <action                   type="fix" dev="ggregory" due-to="Bhimantoro Suryo Admodjo">Simplify condition #925.</action>
+    <action                   type="fix" dev="ggregory" due-to="Gary Gregory">StringUtils.join(Iterator, String) should only return null when the Iterator is null.</action>
     <!-- ADD -->
     <action                   type="add" dev="ggregory" due-to="Gary Gregory">Add GitHub coverage.yml.</action>
     <action                   type="add" dev="ggregory" due-to="Gary Gregory">Add EnumUtils.getEnumSystemProperty(...).</action>
@@ -160,7 +161,7 @@ The <action> type attribute can be add,update,fix,remove.
     <action issue="LANG-1662" type="add" dev="ggregory" due-to="Daniel Augusto Veronezi Salvador, Gary Gregory, Bruno P. Kinoshita">Let ReflectionToStringBuilder only reflect given field names #849.</action>
     <action                   type="add" dev="ggregory" due-to="Gary Gregory">Add Streams.of(Enumeration&lt;E&gt;).</action>
     <action                   type="add" dev="ggregory" due-to="Gary Gregory">Add Streams.of(Iterable&lt;E&gt;).</action>
-    <action                   type="add" dev="ggregory" due-to="Gary Gregory">Add LangCollectors.</action>
+    <action                   type="add" dev="ggregory" due-to="Gary Gregory">Add Streams.of(Iterator&lt;E&gt;).</action>
     <!-- UPDATE -->
     <action                   type="update" dev="ggregory" due-to="Dependabot, XenoAmess, Gary Gregory">Bump actions/cache from 2.1.4 to 3.0.7 #742, #752, #764, #833, #867.</action>
     <action                   type="update" dev="ggregory" due-to="Dependabot">Bump actions/checkout from 2 to 3 #819, #825, #859.</action>
diff --git a/src/main/java/org/apache/commons/lang3/StringUtils.java b/src/main/java/org/apache/commons/lang3/StringUtils.java
index 2960c83f7..b316b1468 100644
--- a/src/main/java/org/apache/commons/lang3/StringUtils.java
+++ b/src/main/java/org/apache/commons/lang3/StringUtils.java
@@ -4350,10 +4350,7 @@ public class StringUtils {
      * @since 2.3
      */
     public static String join(final Iterable<?> iterable, final char separator) {
-        if (iterable == null) {
-            return null;
-        }
-        return join(iterable.iterator(), separator);
+        return iterable != null ? join(iterable.iterator(), separator) : null;
     }
 
     /**
@@ -4371,10 +4368,7 @@ public class StringUtils {
      * @since 2.3
      */
     public static String join(final Iterable<?> iterable, final String separator) {
-        if (iterable == null) {
-            return null;
-        }
-        return join(iterable.iterator(), separator);
+        return iterable != null ? join(iterable.iterator(), separator) : null;
     }
 
     /**
@@ -4436,7 +4430,6 @@ public class StringUtils {
      * @return the joined String, {@code null} if null iterator input
      */
     public static String join(final Iterator<?> iterator, final String separator) {
-
         // handle null, zero and one elements before building a buffer
         if (iterator == null) {
             return null;
@@ -4444,25 +4437,18 @@ public class StringUtils {
         if (!iterator.hasNext()) {
             return EMPTY;
         }
-        final Object first = iterator.next();
-        if (!iterator.hasNext()) {
-            return Objects.toString(first, "");
-        }
 
         // two or more elements
         final StringBuilder buf = new StringBuilder(STRING_BUILDER_SIZE); // Java default is 16, probably too small
-        if (first != null) {
-            buf.append(first);
-        }
 
         while (iterator.hasNext()) {
-            if (separator != null) {
-                buf.append(separator);
-            }
             final Object obj = iterator.next();
             if (obj != null) {
                 buf.append(obj);
             }
+            if (separator != null && iterator.hasNext()) {
+                buf.append(separator);
+            }
         }
         return buf.toString();
     }
diff --git a/src/test/java/org/apache/commons/lang3/StringUtilsTest.java b/src/test/java/org/apache/commons/lang3/StringUtilsTest.java
index f7f035c4b..4ef061b91 100644
--- a/src/test/java/org/apache/commons/lang3/StringUtilsTest.java
+++ b/src/test/java/org/apache/commons/lang3/StringUtilsTest.java
@@ -1310,7 +1310,7 @@ public class StringUtilsTest extends AbstractLangTest {
 
         assertEquals(TEXT_LIST, StringUtils.join(Arrays.asList(ARRAY_LIST).iterator(), SEPARATOR));
 
-        assertNull(StringUtils.join(Arrays.asList(NULL_TO_STRING_LIST).iterator(), SEPARATOR));
+        assertEquals("null", StringUtils.join(Arrays.asList(NULL_TO_STRING_LIST).iterator(), SEPARATOR));
     }
 
     @Test