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-io.git
The following commit(s) were added to refs/heads/master by this push:
new 166dea37 Add and reuse IOConsumer.forEach(*) and forEachIndexed(*).
166dea37 is described below
commit 166dea37e810fcfa9c72cf1f107fd38cfb432486
Author: Gary Gregory <[email protected]>
AuthorDate: Tue Jul 19 12:10:54 2022 -0400
Add and reuse IOConsumer.forEach(*) and forEachIndexed(*).
Use forEach and streams.
---
src/changes/changes.xml | 2 +-
.../org/apache/commons/io/FileSystemUtils.java | 20 +--
.../java/org/apache/commons/io/FilenameUtils.java | 8 +-
src/main/java/org/apache/commons/io/IOUtils.java | 134 ++++++++++++---------
.../java/org/apache/commons/io/file/PathUtils.java | 2 +-
.../commons/io/file/StandardDeleteOption.java | 9 +-
.../commons/io/filefilter/AndFileFilter.java | 5 +-
.../commons/io/filefilter/FileFilterUtils.java | 8 +-
.../apache/commons/io/filefilter/OrFileFilter.java | 5 +-
.../org/apache/commons/io/function/IOConsumer.java | 31 ++++-
.../org/apache/commons/io/function/IOStreams.java | 40 ++++--
.../commons/io/input/ObservableInputStream.java | 5 +-
.../apache/commons/io/input/XmlStreamReader.java | 9 +-
.../commons/io/monitor/FileAlterationMonitor.java | 5 +-
.../commons/io/monitor/FileAlterationObserver.java | 5 +-
.../serialization/ValidatingObjectInputStream.java | 17 +--
16 files changed, 166 insertions(+), 139 deletions(-)
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 83760b2f..cf8400d3 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -357,7 +357,7 @@ The <action> type attribute can be add,update,fix,remove.
Add IOBiConsumer.
</action>
<action dev="ggregory" type="add" due-to="Gary Gregory">
- Add and reuse IOConsumer.forEach(T[], IOConsumer) and
forEachIndexed(Stream, IOConsumer).
+ Add and reuse IOConsumer.forEach(*) and forEachIndexed(*).
</action>
<action dev="ggregory" type="add" due-to="Gary Gregory">
Add CharsetEncoders.
diff --git a/src/main/java/org/apache/commons/io/FileSystemUtils.java
b/src/main/java/org/apache/commons/io/FileSystemUtils.java
index 85763ecd..884368d7 100644
--- a/src/main/java/org/apache/commons/io/FileSystemUtils.java
+++ b/src/main/java/org/apache/commons/io/FileSystemUtils.java
@@ -23,12 +23,12 @@ import java.io.InputStreamReader;
import java.io.OutputStream;
import java.nio.charset.Charset;
import java.time.Duration;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
import java.util.StringTokenizer;
+import java.util.stream.Collectors;
/**
* General File System utilities.
@@ -487,7 +487,7 @@ public class FileSystemUtils {
// however, it's still not perfect as the JDK support is so poor
// (see commons-exec or Ant for a better multithreaded multi-os
solution)
- final List<String> lines = new ArrayList<>(20);
+ final List<String> lines;
Process proc = null;
InputStream in = null;
OutputStream out = null;
@@ -503,12 +503,8 @@ public class FileSystemUtils {
err = proc.getErrorStream();
// default charset is most likely appropriate here
inr = new BufferedReader(new InputStreamReader(in,
Charset.defaultCharset()));
- String line = inr.readLine();
- while (line != null && lines.size() < max) {
- line = line.toLowerCase(Locale.ENGLISH).trim();
- lines.add(line);
- line = inr.readLine();
- }
+
+ lines = inr.lines().limit(max).map(line ->
line.toLowerCase(Locale.ENGLISH).trim()).collect(Collectors.toList());
proc.waitFor();
@@ -516,15 +512,11 @@ public class FileSystemUtils {
if (proc.exitValue() != 0) {
// OS command problem, throw exception
- throw new IOException(
- "Command line returned OS error code '" +
proc.exitValue() +
- "' for command " + Arrays.asList(cmdAttribs));
+ throw new IOException("Command line returned OS error code '"
+ proc.exitValue() + "' for command " + Arrays.asList(cmdAttribs));
}
if (lines.isEmpty()) {
// unknown problem, throw exception
- throw new IOException(
- "Command line did not return any info " +
- "for command " + Arrays.asList(cmdAttribs));
+ throw new IOException("Command line did not return any info "
+ "for command " + Arrays.asList(cmdAttribs));
}
inr.close();
diff --git a/src/main/java/org/apache/commons/io/FilenameUtils.java
b/src/main/java/org/apache/commons/io/FilenameUtils.java
index c23384df..88775013 100644
--- a/src/main/java/org/apache/commons/io/FilenameUtils.java
+++ b/src/main/java/org/apache/commons/io/FilenameUtils.java
@@ -25,6 +25,7 @@ import java.util.Deque;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import java.util.stream.Stream;
/**
* General file name and file path manipulation utilities.
@@ -1054,12 +1055,7 @@ public class FilenameUtils {
return indexOfExtension(fileName) == NOT_FOUND;
}
final String fileExt = getExtension(fileName);
- for (final String extension : extensions) {
- if (fileExt.equals(extension)) {
- return true;
- }
- }
- return false;
+ return Stream.of(extensions).anyMatch(fileExt::equals);
}
/**
diff --git a/src/main/java/org/apache/commons/io/IOUtils.java
b/src/main/java/org/apache/commons/io/IOUtils.java
index a798a75f..fde29d42 100644
--- a/src/main/java/org/apache/commons/io/IOUtils.java
+++ b/src/main/java/org/apache/commons/io/IOUtils.java
@@ -31,6 +31,7 @@ import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Reader;
+import java.io.UncheckedIOException;
import java.io.Writer;
import java.net.HttpURLConnection;
import java.net.ServerSocket;
@@ -45,12 +46,13 @@ import java.nio.channels.ReadableByteChannel;
import java.nio.channels.Selector;
import java.nio.charset.Charset;
import java.nio.file.Files;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
+import java.util.Iterator;
import java.util.List;
import java.util.Objects;
import java.util.function.Consumer;
+import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.apache.commons.io.function.IOConsumer;
@@ -428,6 +430,15 @@ public class IOUtils {
}
}
+ /**
+ * Avoids the need to type cast.
+ *
+ * @param closeable the object to close, may be null
+ */
+ private static void closeQ(final Closeable closeable) {
+ closeQuietly(closeable, null);
+ }
+
/**
* Closes a {@link Closeable} unconditionally.
*
@@ -473,15 +484,6 @@ public class IOUtils {
closeQuietly(closeable, null);
}
- /**
- * Avoids the need to type cast.
- *
- * @param closeable the object to close, may be null
- */
- private static void closeQ(final Closeable closeable) {
- closeQuietly(closeable, null);
- }
-
/**
* Closes a {@link Closeable} unconditionally.
* <p>
@@ -602,22 +604,6 @@ public class IOUtils {
}
}
- /**
- * Closes a stream of {@link Closeable} unconditionally.
- * <p>
- * Equivalent calling {@link Closeable#close()} on each element, except
any exceptions will be ignored.
- * </p>
- *
- * @param closeables the objects to close, may be null or already closed
- * @see #closeQuietly(Closeable)
- * @since 2.12.0
- */
- public static void closeQuietly(final Stream<Closeable> closeables) {
- if (closeables != null) {
- closeables.forEach(IOUtils::closeQuietly);
- }
- }
-
/**
* Closes an {@link OutputStream} unconditionally.
* <p>
@@ -784,6 +770,22 @@ public class IOUtils {
closeQ(socket);
}
+ /**
+ * Closes a stream of {@link Closeable} unconditionally.
+ * <p>
+ * Equivalent calling {@link Closeable#close()} on each element, except
any exceptions will be ignored.
+ * </p>
+ *
+ * @param closeables the objects to close, may be null or already closed
+ * @see #closeQuietly(Closeable)
+ * @since 2.12.0
+ */
+ public static void closeQuietly(final Stream<Closeable> closeables) {
+ if (closeables != null) {
+ closeables.forEach(IOUtils::closeQuietly);
+ }
+ }
+
/**
* Closes an {@link Writer} unconditionally.
* <p>
@@ -895,6 +897,19 @@ public class IOUtils {
}
}
+ // TODO Consider making public
+ private static boolean contentEquals(final Iterator<?> iterator1, final
Iterator<?> iterator2) {
+ while (iterator1.hasNext()) {
+ if (!iterator2.hasNext()) {
+ return false;
+ }
+ if (!Objects.equals(iterator1.next(), iterator2.next())) {
+ return false;
+ }
+ }
+ return !iterator2.hasNext();
+ }
+
/**
* Compares the contents of two Readers to determine if they are equal or
not.
* <p>
@@ -953,6 +968,28 @@ public class IOUtils {
}
}
+ // TODO Consider making public
+ private static boolean contentEquals(final Stream<?> stream1, final
Stream<?> stream2) {
+ if (stream1 == stream2) {
+ return true;
+ }
+ if (stream1 == null || stream2 == null) {
+ return false;
+ }
+ return contentEquals(stream1.iterator(), stream2.iterator());
+ }
+
+ // TODO Consider making public
+ private static boolean contentEqualsIgnoreEOL(final BufferedReader
reader1, final BufferedReader reader2) {
+ if (reader1 == reader2) {
+ return true;
+ }
+ if (reader1 == null || reader2 == null) {
+ return false;
+ }
+ return contentEquals(reader1.lines(), reader2.lines());
+ }
+
/**
* Compares the contents of two Readers to determine if they are equal or
* not, ignoring EOL characters.
@@ -965,28 +1002,18 @@ public class IOUtils {
* @param reader2 the second reader
* @return true if the content of the readers are equal (ignoring EOL
differences), false otherwise
* @throws NullPointerException if either input is null
- * @throws IOException if an I/O error occurs
+ * @throws UncheckedIOException if an I/O error occurs
* @since 2.2
*/
@SuppressWarnings("resource")
- public static boolean contentEqualsIgnoreEOL(final Reader reader1, final
Reader reader2)
- throws IOException {
+ public static boolean contentEqualsIgnoreEOL(final Reader reader1, final
Reader reader2) throws UncheckedIOException {
if (reader1 == reader2) {
return true;
}
- if (reader1 == null ^ reader2 == null) {
+ if (reader1 == null || reader2 == null) {
return false;
}
- final BufferedReader br1 = toBufferedReader(reader1);
- final BufferedReader br2 = toBufferedReader(reader2);
-
- String line1 = br1.readLine();
- String line2 = br2.readLine();
- while (line1 != null && line1.equals(line2)) {
- line1 = br1.readLine();
- line2 = br2.readLine();
- }
- return Objects.equals(line1, line2);
+ return contentEqualsIgnoreEOL(toBufferedReader(reader1),
toBufferedReader(reader2));
}
/**
@@ -2042,12 +2069,12 @@ public class IOUtils {
* @param input the {@link InputStream} to read from, not null
* @return the list of Strings, never null
* @throws NullPointerException if the input is null
- * @throws IOException if an I/O error occurs
+ * @throws UncheckedIOException if an I/O error occurs
* @since 1.1
* @deprecated 2.5 use {@link #readLines(InputStream, Charset)} instead
*/
@Deprecated
- public static List<String> readLines(final InputStream input) throws
IOException {
+ public static List<String> readLines(final InputStream input) throws
UncheckedIOException {
return readLines(input, Charset.defaultCharset());
}
@@ -2063,12 +2090,11 @@ public class IOUtils {
* @param charset the charset to use, null means platform default
* @return the list of Strings, never null
* @throws NullPointerException if the input is null
- * @throws IOException if an I/O error occurs
+ * @throws UncheckedIOException if an I/O error occurs
* @since 2.3
*/
- public static List<String> readLines(final InputStream input, final
Charset charset) throws IOException {
- final InputStreamReader reader = new InputStreamReader(input,
Charsets.toCharset(charset));
- return readLines(reader);
+ public static List<String> readLines(final InputStream input, final
Charset charset) throws UncheckedIOException {
+ return readLines(new InputStreamReader(input,
Charsets.toCharset(charset)));
}
/**
@@ -2087,13 +2113,13 @@ public class IOUtils {
* @param charsetName the name of the requested charset, null means
platform default
* @return the list of Strings, never null
* @throws NullPointerException if the input is
null
- * @throws IOException if an I/O error
occurs
+ * @throws UncheckedIOException if an I/O error
occurs
* @throws java.nio.charset.UnsupportedCharsetException thrown instead of
{@link java.io
*
.UnsupportedEncodingException} in version 2.2 if the
* encoding is not
supported.
* @since 1.1
*/
- public static List<String> readLines(final InputStream input, final String
charsetName) throws IOException {
+ public static List<String> readLines(final InputStream input, final String
charsetName) throws UncheckedIOException {
return readLines(input, Charsets.toCharset(charsetName));
}
@@ -2108,18 +2134,12 @@ public class IOUtils {
* @param reader the {@link Reader} to read from, not null
* @return the list of Strings, never null
* @throws NullPointerException if the input is null
- * @throws IOException if an I/O error occurs
+ * @throws UncheckedIOException if an I/O error occurs
* @since 1.1
*/
@SuppressWarnings("resource") // reader wraps input and is the
responsibility of the caller.
- public static List<String> readLines(final Reader reader) throws
IOException {
- final BufferedReader bufReader = toBufferedReader(reader);
- final List<String> list = new ArrayList<>();
- String line;
- while ((line = bufReader.readLine()) != null) {
- list.add(line);
- }
- return list;
+ public static List<String> readLines(final Reader reader) throws
UncheckedIOException {
+ return toBufferedReader(reader).lines().collect(Collectors.toList());
}
/**
diff --git a/src/main/java/org/apache/commons/io/file/PathUtils.java
b/src/main/java/org/apache/commons/io/file/PathUtils.java
index 85b1d5be..f8b2d470 100644
--- a/src/main/java/org/apache/commons/io/file/PathUtils.java
+++ b/src/main/java/org/apache/commons/io/file/PathUtils.java
@@ -820,7 +820,7 @@ public final class PathUtils {
* where {@link File#lastModified()} looses milliseconds and always ends
in 000. This bug is in OpenJDK 8 and 9, and
* fixed in 11.
* </p>
- *
+ *
* @param file the file to query.
* @return the file's last modified time.
* @throws IOException Thrown if an I/O error occurs.
diff --git a/src/main/java/org/apache/commons/io/file/StandardDeleteOption.java
b/src/main/java/org/apache/commons/io/file/StandardDeleteOption.java
index 4c31b7f4..c5c2af96 100644
--- a/src/main/java/org/apache/commons/io/file/StandardDeleteOption.java
+++ b/src/main/java/org/apache/commons/io/file/StandardDeleteOption.java
@@ -17,6 +17,8 @@
package org.apache.commons.io.file;
+import java.util.stream.Stream;
+
import org.apache.commons.io.IOUtils;
/**
@@ -43,12 +45,7 @@ public enum StandardDeleteOption implements DeleteOption {
if (IOUtils.length(options) == 0) {
return false;
}
- for (final DeleteOption deleteOption : options) {
- if (deleteOption == StandardDeleteOption.OVERRIDE_READ_ONLY) {
- return true;
- }
- }
- return false;
+ return Stream.of(options).anyMatch(e ->
StandardDeleteOption.OVERRIDE_READ_ONLY == e);
}
}
diff --git a/src/main/java/org/apache/commons/io/filefilter/AndFileFilter.java
b/src/main/java/org/apache/commons/io/filefilter/AndFileFilter.java
index 6afb3fc9..e29f780e 100644
--- a/src/main/java/org/apache/commons/io/filefilter/AndFileFilter.java
+++ b/src/main/java/org/apache/commons/io/filefilter/AndFileFilter.java
@@ -25,6 +25,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
+import java.util.stream.Stream;
/**
* A {@link java.io.FileFilter} providing conditional AND logic across a list
of
@@ -148,9 +149,7 @@ public class AndFileFilter
* @since 2.9.0
*/
public void addFileFilter(final IOFileFilter... fileFilters) {
- for (final IOFileFilter fileFilter :
Objects.requireNonNull(fileFilters, "fileFilters")) {
- addFileFilter(fileFilter);
- }
+ Stream.of(Objects.requireNonNull(fileFilters,
"fileFilters")).forEach(this::addFileFilter);
}
/**
diff --git
a/src/main/java/org/apache/commons/io/filefilter/FileFilterUtils.java
b/src/main/java/org/apache/commons/io/filefilter/FileFilterUtils.java
index e47655dd..c1c205ee 100644
--- a/src/main/java/org/apache/commons/io/filefilter/FileFilterUtils.java
+++ b/src/main/java/org/apache/commons/io/filefilter/FileFilterUtils.java
@@ -19,7 +19,6 @@ package org.apache.commons.io.filefilter;
import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
@@ -723,12 +722,7 @@ public class FileFilterUtils {
* @since 2.0
*/
public static List<IOFileFilter> toList(final IOFileFilter... filters) {
- Objects.requireNonNull(filters, "filters");
- final List<IOFileFilter> list = new ArrayList<>(filters.length);
- for (final IOFileFilter filter : filters) {
- list.add(Objects.requireNonNull(filter, "filters[i]"));
- }
- return list;
+ return Stream.of(Objects.requireNonNull(filters,
"filters")).map(Objects::requireNonNull).collect(Collectors.toList());
}
/**
diff --git a/src/main/java/org/apache/commons/io/filefilter/OrFileFilter.java
b/src/main/java/org/apache/commons/io/filefilter/OrFileFilter.java
index 18016ed5..d8a6b19c 100644
--- a/src/main/java/org/apache/commons/io/filefilter/OrFileFilter.java
+++ b/src/main/java/org/apache/commons/io/filefilter/OrFileFilter.java
@@ -25,6 +25,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
+import java.util.stream.Stream;
/**
* A {@link java.io.FileFilter} providing conditional OR logic across a list
of file filters. This filter returns
@@ -141,9 +142,7 @@ public class OrFileFilter extends AbstractFileFilter
implements ConditionalFileF
* @since 2.9.0
*/
public void addFileFilter(final IOFileFilter... fileFilters) {
- for (final IOFileFilter fileFilter :
Objects.requireNonNull(fileFilters, "fileFilters")) {
- addFileFilter(fileFilter);
- }
+ Stream.of(Objects.requireNonNull(fileFilters,
"fileFilters")).forEach(this::addFileFilter);
}
/**
diff --git a/src/main/java/org/apache/commons/io/function/IOConsumer.java
b/src/main/java/org/apache/commons/io/function/IOConsumer.java
index bd52b607..a8492d2b 100644
--- a/src/main/java/org/apache/commons/io/function/IOConsumer.java
+++ b/src/main/java/org/apache/commons/io/function/IOConsumer.java
@@ -18,6 +18,7 @@
package org.apache.commons.io.function;
import java.io.IOException;
+import java.util.Collection;
import java.util.Objects;
import java.util.function.Consumer;
import java.util.stream.Stream;
@@ -40,7 +41,33 @@ public interface IOConsumer<T> {
IOConsumer<?> NOOP_IO_CONSUMER = t -> {/* noop */};
/**
- * Performs an action for each element of this stream.
+ * Performs an action for each element of the collection.
+ *
+ * @param <T> The element type.
+ * @param collection The input to stream.
+ * @param action The action to apply to each input element.
+ * @throws IOException if an I/O error occurs.
+ * @since 2.12.0
+ */
+ static <T> void forEach(final Collection<T> collection, final
IOConsumer<T> action) throws IOException {
+ IOStreams.forEach(IOStreams.of(collection), action);
+ }
+
+ /**
+ * Performs an action for each element of the stream.
+ *
+ * @param <T> The element type.
+ * @param stream The input to stream.
+ * @param action The action to apply to each input element.
+ * @throws IOException if an I/O error occurs.
+ * @since 2.12.0
+ */
+ static <T> void forEach(final Stream<T> stream, final IOConsumer<T>
action) throws IOException {
+ IOStreams.forEach(stream, action);
+ }
+
+ /**
+ * Performs an action for each element of this array.
*
* @param <T> The element type.
* @param array The input to stream.
@@ -53,7 +80,7 @@ public interface IOConsumer<T> {
}
/**
- * Performs an action for each element of this stream.
+ * Performs an action for each element of the stream.
*
* @param <T> The element type.
* @param stream The input to stream.
diff --git a/src/main/java/org/apache/commons/io/function/IOStreams.java
b/src/main/java/org/apache/commons/io/function/IOStreams.java
index bbcf78c8..21f344bd 100644
--- a/src/main/java/org/apache/commons/io/function/IOStreams.java
+++ b/src/main/java/org/apache/commons/io/function/IOStreams.java
@@ -19,6 +19,7 @@ package org.apache.commons.io.function;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
@@ -40,18 +41,35 @@ class IOStreams {
throws IOExceptionList {
final AtomicReference<List<IOException>> causeList = new
AtomicReference<>();
final AtomicInteger index = new AtomicInteger();
- stream.forEach(e -> {
- try {
- action.accept(e);
- } catch (final IOException ioex) {
- if (causeList.get() == null) {
- causeList.set(new ArrayList<>());
+ final IOConsumer<T> actualAction = action != null ? action :
IOConsumer.noop();
+ if (stream != null) {
+ stream.forEach(e -> {
+ try {
+ actualAction.accept(e);
+ } catch (final IOException ioex) {
+ if (causeList.get() == null) {
+ causeList.set(new ArrayList<>());
+ }
+ if (exSupplier != null) {
+ causeList.get().add(exSupplier.apply(index.get(),
ioex));
+ }
}
- causeList.get().add(exSupplier.apply(index.get(), ioex));
- }
- index.incrementAndGet();
- });
- IOExceptionList.checkEmpty(causeList.get(), null);
+ index.incrementAndGet();
+ });
+ IOExceptionList.checkEmpty(causeList.get(), null);
+ }}
+
+ /**
+ * Null-safe version of {@link Collection#stream()}.
+ *
+ * Copied from Apache Commons Lang.
+ *
+ * @param <T> the type of stream elements.
+ * @param values the elements of the new stream, may be {@code null}.
+ * @return the new stream on {@code values} or {@link Stream#empty()}.
+ */
+ static <T> Stream<T> of(final Collection<T> values) {
+ return values == null ? Stream.empty() : values.stream();
}
/**
diff --git
a/src/main/java/org/apache/commons/io/input/ObservableInputStream.java
b/src/main/java/org/apache/commons/io/input/ObservableInputStream.java
index d83ce9c0..3acf9938 100644
--- a/src/main/java/org/apache/commons/io/input/ObservableInputStream.java
+++ b/src/main/java/org/apache/commons/io/input/ObservableInputStream.java
@@ -175,10 +175,7 @@ public class ObservableInputStream extends
ProxyInputStream {
}
private void forEachObserver(final IOConsumer<Observer> action) throws
IOException {
- Objects.requireNonNull(action);
- for (final Observer t : observers) {
- action.accept(t);
- }
+ IOConsumer.forEach(observers, Objects.requireNonNull(action));
}
/**
diff --git a/src/main/java/org/apache/commons/io/input/XmlStreamReader.java
b/src/main/java/org/apache/commons/io/input/XmlStreamReader.java
index 2efeb39b..7ca6c19b 100644
--- a/src/main/java/org/apache/commons/io/input/XmlStreamReader.java
+++ b/src/main/java/org/apache/commons/io/input/XmlStreamReader.java
@@ -38,6 +38,7 @@ import java.util.regex.Pattern;
import org.apache.commons.io.ByteOrderMark;
import org.apache.commons.io.IOUtils;
+import org.apache.commons.io.function.IOConsumer;
/**
* Character stream that handles all the necessary Voodoo to figure out the
@@ -214,13 +215,9 @@ public class XmlStreamReader extends Reader {
final int bytesRead = offset;
if (bytesRead > 0) {
inputStream.reset();
- final BufferedReader bReader = new BufferedReader(new
StringReader(
- xmlProlog.substring(0, firstGT + 1)));
+ final BufferedReader bReader = new BufferedReader(new
StringReader(xmlProlog.substring(0, firstGT + 1)));
final StringBuilder prolog = new StringBuilder();
- String line;
- while ((line = bReader.readLine()) != null) {
- prolog.append(line);
- }
+ IOConsumer.forEach(bReader.lines(), prolog::append);
final Matcher m = ENCODING_PATTERN.matcher(prolog);
if (m.find()) {
encoding = m.group(1).toUpperCase(Locale.ROOT);
diff --git
a/src/main/java/org/apache/commons/io/monitor/FileAlterationMonitor.java
b/src/main/java/org/apache/commons/io/monitor/FileAlterationMonitor.java
index 4384b3b6..d2b418e1 100644
--- a/src/main/java/org/apache/commons/io/monitor/FileAlterationMonitor.java
+++ b/src/main/java/org/apache/commons/io/monitor/FileAlterationMonitor.java
@@ -22,6 +22,7 @@ import java.util.List;
import java.util.Optional;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.ThreadFactory;
+import java.util.stream.Stream;
/**
* A runnable that spawns a monitoring thread triggering any
@@ -86,9 +87,7 @@ public final class FileAlterationMonitor implements Runnable {
public FileAlterationMonitor(final long interval, final
FileAlterationObserver... observers) {
this(interval);
if (observers != null) {
- for (final FileAlterationObserver observer : observers) {
- addObserver(observer);
- }
+ Stream.of(observers).forEach(this::addObserver);
}
}
diff --git
a/src/main/java/org/apache/commons/io/monitor/FileAlterationObserver.java
b/src/main/java/org/apache/commons/io/monitor/FileAlterationObserver.java
index 9e9687ca..c05c18f5 100644
--- a/src/main/java/org/apache/commons/io/monitor/FileAlterationObserver.java
+++ b/src/main/java/org/apache/commons/io/monitor/FileAlterationObserver.java
@@ -24,6 +24,7 @@ import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.stream.Stream;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOCase;
@@ -315,9 +316,7 @@ public class FileAlterationObserver implements Serializable
{
listener.onFileCreate(entry.getFile());
}
});
- for (final FileEntry aChildren : entry.getChildren()) {
- doCreate(aChildren);
- }
+ Stream.of(entry.getChildren()).forEach(this::doCreate);
}
/**
diff --git
a/src/main/java/org/apache/commons/io/serialization/ValidatingObjectInputStream.java
b/src/main/java/org/apache/commons/io/serialization/ValidatingObjectInputStream.java
index a27d72cd..bde163c7 100644
---
a/src/main/java/org/apache/commons/io/serialization/ValidatingObjectInputStream.java
+++
b/src/main/java/org/apache/commons/io/serialization/ValidatingObjectInputStream.java
@@ -26,6 +26,7 @@ import java.io.ObjectStreamClass;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
+import java.util.stream.Stream;
/**
* An {@link ObjectInputStream} that's restricted to deserialize
@@ -67,9 +68,7 @@ public class ValidatingObjectInputStream extends
ObjectInputStream {
* @return this object
*/
public ValidatingObjectInputStream accept(final Class<?>... classes) {
- for (final Class<?> c : classes) {
- acceptMatchers.add(new FullClassNameMatcher(c.getName()));
- }
+ Stream.of(classes).map(c -> new
FullClassNameMatcher(c.getName())).forEach(acceptMatchers::add);
return this;
}
@@ -106,9 +105,7 @@ public class ValidatingObjectInputStream extends
ObjectInputStream {
* @return this object
*/
public ValidatingObjectInputStream accept(final String... patterns) {
- for (final String pattern : patterns) {
- acceptMatchers.add(new WildcardClassNameMatcher(pattern));
- }
+
Stream.of(patterns).map(WildcardClassNameMatcher::new).forEach(acceptMatchers::add);
return this;
}
@@ -132,9 +129,7 @@ public class ValidatingObjectInputStream extends
ObjectInputStream {
* @return this object
*/
public ValidatingObjectInputStream reject(final Class<?>... classes) {
- for (final Class<?> c : classes) {
- rejectMatchers.add(new FullClassNameMatcher(c.getName()));
- }
+ Stream.of(classes).map(c -> new
FullClassNameMatcher(c.getName())).forEach(rejectMatchers::add);
return this;
}
@@ -171,9 +166,7 @@ public class ValidatingObjectInputStream extends
ObjectInputStream {
* @return this object
*/
public ValidatingObjectInputStream reject(final String... patterns) {
- for (final String pattern : patterns) {
- rejectMatchers.add(new WildcardClassNameMatcher(pattern));
- }
+
Stream.of(patterns).map(WildcardClassNameMatcher::new).forEach(rejectMatchers::add);
return this;
}