Util { public static <T> Predicate<T> debugFilter(final Logger logger, final String format) { return item -> { logger.debug(format, item); return true; }; } private  Util(); static Session wrapSessionReadOnly(final Session session); static List<String> getManifestHeaderValues(final Manifest manifest, final String headerName); static String escapeManifestHeaderValue(final @NotNull String... values); static String escapeManifestHeaderValues(final @NotNull List<String> values); static List<URL> resolveManifestResources(final URL manifestUrl, final List<String> resources); static Map<URL, List<URL>> mapManifestHeaderResources(final String headerName, final ClassLoader classLoader); static Map<URL, List<URL>> mapManifestHeaderResources(final String headerName, final List<File> files); static Map<URL, List<URL>> mapManifestHeaderResources(final String headerName, final URL manifestUrl); static Predicate<T> debugFilter(final Logger logger, final String format); static Predicate<T> traceFilter(final Logger logger, final String format); @Deprecated static Function<T, M> composeTry(final Function<R, M> monadUnit,
                                                      final Supplier<M> monadZero,
                                                      final TryFunction<T, R> onElement,
                                                      final BiConsumer<T, Exception> onError); @Deprecated static Function<T, Optional<R>> optFunc(final Function<T, R> inputFunc); @Deprecated static Function<T, R> compose(final Function<T, I> before, final Function<I, R> after);  }
@Test public void testDebugFilter() { LoggerContext context = (LoggerContext) StaticLoggerBinder.getSingleton().getLoggerFactory(); Logger logger = context.getLogger("testDebugFilter"); logger.setLevel(Level.DEBUG); assertEquals("debugFilter should not interfere with stream", Arrays.asList("one", "two", "three"), Stream.of("one", "two", "three") .filter(Util.debugFilter(logger, "counting {}")) .collect(Collectors.toList())); }