public static ProductMessage getProductMessage( List<Message> messages, Product product, Language language) { if (messages == null) throw new IllegalArgumentException("Message list was null"); ProductMessage productMessage = messages .stream() .filter( msg -> { if (msg instanceof ProductMessage) { ProductMessage msg1 = (ProductMessage) msg; return msg1.getProduct().equals(product) && msg1.getLanguage().equals(language); } else { return false; } }) .findAny() .map(msg -> (ProductMessage) msg) .get(); if (productMessage == null) { throw new IllegalArgumentException( String.format("ProductMessage missing: %s, %s", product, language)); } return productMessage; }