code: public static Stream<Map.Entry<Field, Object>> fields(Object obj, Predicate<Field> predicate) {
  		Class<?> clazz = obj == null ? ObjectIsNull.class : obj.getClass();
  		return Arrays.asList(clazz.getFields()).stream()
  				// gotta be public
  				.filter(field -> Modifier.isPublic(field.getModifiers()))
  				// gotta be an instance field
  				.filter(field -> !Modifier.isStatic(field.getModifiers()))
  				// gotta pass the predicate 
  				.filter(predicate)
  				// get its value
  				.map(field -> createEntry(field, tryCall(field.getName(), () -> field.get(obj))));
  	}
docs: Returns a {@code Stream} of all public fields which match {@code predicate} and their values for the given object.
  <p>
  This method uses reflection to find all of the public instance fields of the given object,
  and if they pass the given predicate, it includes them in a stream of {@code Map.Entry<Field, Object>}
  where the entry's value is the value of the field for this object.