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()); }