A "tee" method did not make it into Java 8 streams, but you can make your own easily enough:
public final class Tee<T>
implements Predicate<T> {
private final Predicate<T> test;
private final Consumer<T> reject;
@Nonnull
public static <T> Predicate<T> tee(
@Nonnull final Predicate<T> test,
@Nonnull final Consumer<T> reject) {
return new Tee<>(test, reject);
}
private Tee(final Predicate<T> test,
final Consumer<T> reject) {
this.test = test;
this.reject = reject;
}
@Override
public boolean test(final T t) {
if (test.test(t))
return true;
reject.accept(t);
return false;
}
public static void main(final String... args) {
asList("a", "bb", "ccc", "dddd").stream().
filter(tee(Tee::even, err::println)).
forEach(out::println);
}
private static boolean even(final String s) {
return 0 == s.length() % 2;
}
}
No comments:
Post a Comment