Util { @Deprecated public static <M, T, R> Function<T, M> composeTry(final Function<R, M> monadUnit, final Supplier<M> monadZero, final TryFunction<T, R> onElement, final BiConsumer<T, Exception> onError) { return Fun.composeTry1(monadUnit, monadZero, onElement, onError); } 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 testComposeTry() { final AtomicInteger counter = new AtomicInteger(0); assertEquals("skip divide by 0 with no side effects", Arrays.asList(3, 4, 6, 12), Stream.of(4, 3, 2, 1, 0) .flatMap(Util.composeTry( Stream::of, Stream::empty, (value) -> 12 / value, null)) .collect(Collectors.toList())); assertEquals("skip divide by 0 with counter update as side effect", Arrays.asList(3, 4, 6, 12), Stream.of(4, 3, 2, 1, 0) .flatMap(Util.composeTry( Stream::of, Stream::empty, (value) -> 12 / value, (element, error) -> counter.incrementAndGet())) .collect(Collectors.toList())); assertEquals("counter should have incremented to 1", 1, counter.get()); }