private static <T> T traverseFiltersInternal(final IGeocacheFilter filterToCheck, final Func1<IGeocacheFilter, T> checker) {
        if (filterToCheck == null) {
            return null;
        }
        final T result = checker.call(filterToCheck);
        if (result != null) {
            return result;
        }
        if (filterToCheck.getChildren() != null) {
            for (IGeocacheFilter child : filterToCheck.getChildren()) {
                final T childResult = traverseFiltersInternal(child, checker);
                if (childResult != null) {
                    return childResult;
                }
            }
        }
        return null;
    }
traverses all (sub-)filters and performs a check on it. If checker returns null, traverse is continued. Otherwise traverse is stopped and value is returned
main/src/main/java/cgeo/geocaching/filters/core/GeocacheFilter.java