code: public static Object getProperty(Object bean, List<String> propertyPath) {
  		Object current = bean;
  		for (String propertyName : propertyPath) {
  			if (current == null) {
  				return null;
  			}
  			if (current instanceof Iterable) {
  				// follow multi-valued property
  				List<Object> result = new ArrayList<>();
  				Iterable<?> iterable = (Iterable<?>) current;
  				for (Object currentElem : iterable) {
  					result.add(getProperty(currentElem, propertyName));
  				}
  				current = result;
  			} else {
  				// follow single-valued property
  				current = getProperty(current, propertyName);
  			}
  		}
  		return current;
  	}
docs: Similar to {@link PropertyUtils#getProperty(Object, String)} but returns the property value for the tail of the given
  property path.
  
  @param bean         bean to be accessed
  @param propertyPath property path
  @return value