private static final Map<Function<Address, Boolean>, ValidationMessage> map = new HashMap<>();

  static
  {
    map.put(address -> address.getHousenumber() == null, new ValidationMessage(AddressPart.HOUSENUMBER, "Housenumber is missing"));
    map.put(address -> address.getHousenumber() != null && (address.getHousenumber() < 0 || address.getHousenumber() > 50000),
        new ValidationMessage(AddressPart.HOUSENUMBER, "Housenumber should be between 0 and 50000"));
    map.put(address -> address.getCity() == null, new ValidationMessage(AddressPart.CITY, "City is missing"));
    map.put(address -> address.getStreetName() == null, new ValidationMessage(AddressPart.STREETNAME, "Streetname is missing"));
    map.put(address -> address.getState() == null, new ValidationMessage(AddressPart.STATE, "State is missing"));
    map.put(address -> address.getState() != null && address.getState().length() != 2, new ValidationMessage(AddressPart.STATE, "Expecting State to be a 2-letter abbreviation"));
    map.put(address -> address.getSuffix() != null && address.getSuffix().length() != 1, new ValidationMessage(AddressPart.SUFFIX, "Suffix to a house number should be just one letter"));
  }

  public List<ValidationMessage> verifyAddress(Address address)
  {
    return map.entrySet().stream()
        .filter((x) -> x.getKey().apply(address))
        .map(Map.Entry::getValue)
        .collect(Collectors.toList());
  }