public static <A, B, C> Predicate<C> filtering(
        final Function<? super C, ? extends B> extractor1,
        final Function<? super B, ? extends A> extractor2,
        final Predicate<? super A> filter
    ) {
		requireNonNull(extractor1);
		requireNonNull(extractor2);
		requireNonNull(filter);

        return value -> {
			final var v1 = extractor1.apply(value);
			final var v2 = v1 != null ? extractor2.apply(v1) : null;

			return filter.test(v2);
		};
    }
Accepts functions that extract the filter key from a type {@code C},
and returns a {@code Predicate<C>} that tests the key using the specified
{@code filter}.

@param extractor1 the first extractor function
@param extractor2 the second extractor function
@param filter the {@code Predicate} used for testing the key
@return a predicate for testing a key
@param <A> the type of the object to test with the given filter
@param <B> the first intermediate type
@param <C> the type of the object to test with the created filter
jenetics.incubator/src/main/java/io/jenetics/incubator/beans/Filters.java