code: public static void dumpIf(String name, Object obj, Predicate<String> evalPredicate, Predicate<Map.Entry<String, Object>> dumpPredicate, StringPrinter printer) {
  		printer.println(name + ": " + obj.getClass().getName());
  		fieldsAndGetters(obj, evalPredicate).filter(dumpPredicate).forEach(entry -> {
  			printer.println("\t" + entry.getKey() + " = " + entry.getValue());
  		});
  	}
docs: Passes each field and getter of {@code obj} to {@code evalPredicate}, grabs its value if it passes, and if the value passes {@code dumpPredicate} then it is dumped to {@code printer}.
  @see #fieldsAndGetters(Object, Predicate)