code: public static Stream<Map.Entry<String, Object>> fieldsAndGetters(Object obj, Predicate<String> predicate) {
  		Stream<Map.Entry<String, Object>> fields = fields(obj, field -> predicate.test(field.getName()))
  				.map(entry -> createEntry(entry.getKey().getName(), entry.getValue()));
  		Function<Method, String> methodName = method -> method.getName() + "()";
  		Stream<Map.Entry<String, Object>> getters = getters(obj, field -> predicate.test(methodName.apply(field)))
  				.map(entry -> createEntry(methodName.apply(entry.getKey()), entry.getValue()));
  		return Stream.concat(fields, getters);
  	}
docs: Returns a {@code Stream} of all public fields and getter methods which match {@code predicate} and their values for the given object.
  <p>
  This method combines the results of {@link #fields(Object, Predicate)} and {@link #getters(Object, Predicate)}. The {@code Predicate<String>}
  will be passed the field names and the getter names (which are postfixed by {@code ()} to mark them as methods).
  
  @see #fields(Object, Predicate)
  @see #getters(Object, Predicate)