使用Java 8的Stream
API
来解决此问题。可以使用Collectors.groupingBy()方法来按字段分组并将结果存储在Map中。然后使用Collectors.summingInt()方法在每个组中计算非空字段的数量。
以下是示例代码:
public cl
as
s Student {
private
String name;
private
Integer age;
private
String gender;
// constructors, getters and setters
List<Student> students = // initialize student list here
Map<String, Integer> nonNullFieldCounts = students.stream()
.collect(Collectors.groupingBy(
Student::getGender,
Collectors.summingInt(student -> {
int count = 0;
if (student.getName() != null) count++;
if (student.getAge() != null) count++;
return count;
上述代码将按性别分组学生,并计算每个组中非空字段的数量。最终结果将存储在Map<String, Integer>对象中,其中键是性别,值是非空字段的数量。