code: public Set<String> getNamesForType(Class<?> type, TypeExtractor typeExtractor) {
  		updateTypesIfNecessary();
  		return this.beanTypes.entrySet().stream().filter((entry) -> {
  			Class<?> beanType = extractType(entry.getValue(), typeExtractor);
  			return beanType != null && type.isAssignableFrom(beanType);
  		}
docs: Return the names of beans matching the given type (including subclasses), judging
  from either bean definitions or the value of {@link FactoryBean#getObjectType()} in
  the case of {@link FactoryBean FactoryBeans}. Will include singletons but will not
  cause early bean initialization.
  @param type the class or interface to match (must not be {@code null})
  @param typeExtractor function used to extract the actual type
  @return the names of beans (or objects created by FactoryBeans) matching the given
  object type (including subclasses), or an empty set if none