public static <T> Map<String, BetterCacherCache> getCaches(final Collection<T> cacheData, final Func1<T, String> geocodeGetter, final boolean fullData) {
        //search for caches
        final Map<String, BetterCacherCache>[] bcCaches = new Map[1];
        CommonUtils.executeOnPartitions(cacheData, 400, sublist -> {

            final String geocodes = CollectionStream.of(sublist).map(c -> geocodeGetter.call(c).trim()).toJoinedString(",");
            final Map<String, BetterCacherCache> submap = fullData ?
                    callAPI(API_URL_FULLDATA_FOR_GEOCODES + geocodes, true) :
                    callAPI(API_URL_STUMPS_FOR_GEOCODES + geocodes, false);
            if (bcCaches[0] == null) {
                bcCaches[0] = submap;
            } else {
                bcCaches[0].putAll(submap);
            }
            return true;
        });
        return bcCaches[0] == null ? Collections.emptyMap() : bcCaches[0];
    }
Encapsulates the raw APi calls to bettercacher.org
main/src/main/java/cgeo/geocaching/connector/bettercacher/BetterCacherAPI.java