从对象列表 java 中获取具有最大字符大小的 属性
Get Property that has max Character size from list of objects java
我有一个 List<Staff>
,我将从数据库中获取这些值。我需要找到最大字符大小
一个特定的领域,这将是动态的。现在我能够获得 firstName 的最大大小,但它是硬编码的,如下所示。
public class Staff {
private String firstName;
private String lastName;
private String surName;
private String mailId;
}
List<String> fields = Arrays.asList("firstName", "lastName", "surName");
List<Staff> staffList = staffRepository.findAll();
fields.stream.map(field ->
Long maxLength = staffList.stream()
.map(Staff::getFirstName()) // i need to pass the field which will be dynamically changing
.mapToInt(String::length)
.max()).mapToLong(max -> max.orElse(0)).sum()
如 thread
中所述,有多种方法可以访问 属性 值
所以基本上,你可以写这样的东西来访问值
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);
}
然后访问字段的长度,创建另一个方法
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();
}
您可以将其包装在方法中并遍历字段以计算所有字段的最大值。
我有一个 List<Staff>
,我将从数据库中获取这些值。我需要找到最大字符大小
一个特定的领域,这将是动态的。现在我能够获得 firstName 的最大大小,但它是硬编码的,如下所示。
public class Staff {
private String firstName;
private String lastName;
private String surName;
private String mailId;
}
List<String> fields = Arrays.asList("firstName", "lastName", "surName");
List<Staff> staffList = staffRepository.findAll();
fields.stream.map(field ->
Long maxLength = staffList.stream()
.map(Staff::getFirstName()) // i need to pass the field which will be dynamically changing
.mapToInt(String::length)
.max()).mapToLong(max -> max.orElse(0)).sum()
如 thread
中所述,有多种方法可以访问 属性 值所以基本上,你可以写这样的东西来访问值
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);
}
然后访问字段的长度,创建另一个方法
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();
}
您可以将其包装在方法中并遍历字段以计算所有字段的最大值。