Существует несколько способов доступа к значениям свойств, как описано в этом потоке
Таким образом, вы можете написать что-то вроде этого для доступа к значению
private static Optional<Method> getMethodForField(Class clazz, String fieldName) throws IntrospectionException {
return Arrays.stream(Introspector.getBeanInfo(clazz).getPropertyDescriptors())
.filter(propertyDescriptor -> propertyDescriptor.getName().equalsIgnoreCase(fieldName))
.findFirst()
.map(PropertyDescriptor::getReadMethod);
}
затем Access Length поля, создайте другой метод
private static int getFieldLength(Staff staff, Method readMethod) {
try {
return ((String) readMethod.invoke(staff)).length();
} catch(Exception e){ }
return 0;
}
и теперь, наконец, код для вычисления макс.
Optional<Method> readMethod = getMethodForField(Staff.class, "firstName");
if (readMethod.isPresent()) {
staffList.stream()
.mapToInt(data -> getFieldLength(data, readMethod.get()))
.max();
}
вы можете оберните это в метод и итерируйте по полям, чтобы вычислить max для всех из них.