private Set<CachedHashedDataFeedKey> createHashedDataFeedKey(final UnHashedCacheKey unHashedCacheKey) {
        Objects.requireNonNull(unHashedCacheKey);
        if (!DATA_FEED_KEY_PATTERN.matcher(unHashedCacheKey.unHashedKey).matches()) {
            LOGGER.debug("key '{}' does not look like a not a datafeed key", unHashedCacheKey.unHashedKey);
            return Collections.emptySet();
        }

        final Set<CachedHashedDataFeedKey> matchingKeys;
        synchronized (this) {
            // Likely to only be 1-2 items per owner
            final Set<CachedHashedDataFeedKey> ownersKeys = keyOwnerToDataFeedKeyMap.get(unHashedCacheKey.keyOwner);
            matchingKeys = NullSafe.stream(ownersKeys)
                    .filter(cachedHashedDataFeedKey ->
                            verifyKey(unHashedCacheKey.unHashedKey, cachedHashedDataFeedKey))
                    .collect(Collectors.toCollection(ConcurrentHashMap::newKeySet));
        }
        LOGGER.debug("unHashedCacheKey: {}, matchingKeys: {}", unHashedCacheKey, matchingKeys);
        return matchingKeys;
    }
Loading function for an un-hashed key and its keyOwner.
stroom-receive/stroom-receive-common/src/main/java/stroom/receive/common/DataFeedKeyServiceImpl.java