Only create wrapper set once.
diff --git a/src/main/java/org/apache/commons/io/input/AbstractCharacterFilterReader.java b/src/main/java/org/apache/commons/io/input/AbstractCharacterFilterReader.java
index 02147ca..62629a9 100644
--- a/src/main/java/org/apache/commons/io/input/AbstractCharacterFilterReader.java
+++ b/src/main/java/org/apache/commons/io/input/AbstractCharacterFilterReader.java
@@ -28,7 +28,7 @@
*/
public abstract class AbstractCharacterFilterReader extends FilterReader {
- private static final IntPredicate SKIP_NONE = ch -> false;
+ protected static final IntPredicate SKIP_NONE = ch -> false;
private final IntPredicate skip;
diff --git a/src/main/java/org/apache/commons/io/input/CharacterSetFilterReader.java b/src/main/java/org/apache/commons/io/input/CharacterSetFilterReader.java
index a7577a9..0634c32 100644
--- a/src/main/java/org/apache/commons/io/input/CharacterSetFilterReader.java
+++ b/src/main/java/org/apache/commons/io/input/CharacterSetFilterReader.java
@@ -21,6 +21,7 @@
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
+import java.util.function.IntPredicate;
/**
* A filter reader that removes a given set of characters represented as {@code int} code points, handy to remove known
@@ -32,6 +33,14 @@
*/
public class CharacterSetFilterReader extends AbstractCharacterFilterReader {
+ private static IntPredicate toIntPredicate(final Set<Integer> skip) {
+ if (skip == null) {
+ return SKIP_NONE;
+ }
+ final Set<Integer> unmodifiableSet = Collections.unmodifiableSet(skip);
+ return c -> unmodifiableSet.contains(Integer.valueOf(c));
+ }
+
/**
* Constructs a new reader.
*
@@ -50,7 +59,7 @@
* @param skip the set of characters to filter out.
*/
public CharacterSetFilterReader(final Reader reader, final Set<Integer> skip) {
- super(reader, c -> skip == null ? null : Collections.unmodifiableSet(skip).contains(Integer.valueOf(c)));
+ super(reader, toIntPredicate(skip));
}
}