Add Streams.of(Iterator)
This commit is contained in:
parent
ec93f3b7f5
commit
717f163a6d
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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[])}.
|
||||
*
|
||||
|
|
|
@ -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");
|
||||
|
|
Loading…
Reference in New Issue