如何使用另一个列表中的对象的属性创建新列表
2022-08-31 11:04:24
想象一下,我有一个特定对象的列表:
List<Student>
我需要生成另一个列表,包括上面列表中的:ids
Students
List<Integer>
避免使用循环,是否可以通过使用apache集合或番石榴来实现这一点?
哪些方法对我的情况应该有用?
想象一下,我有一个特定对象的列表:
List<Student>
我需要生成另一个列表,包括上面列表中的:ids
Students
List<Integer>
避免使用循环,是否可以通过使用apache集合或番石榴来实现这一点?
哪些方法对我的情况应该有用?
Java 8的制作方法:-
List<Integer> idList = students.stream().map(Student::getId).collect(Collectors.toList());
使用番石榴,您可以使用功能,例如 -
private enum StudentToId implements Function<Student, Integer> {
INSTANCE;
@Override
public Integer apply(Student input) {
return input.getId();
}
}
您可以使用此功能将学生列表转换为ID,例如 -
Lists.transform(studentList, StudentToId.INSTANCE);
当然,它会循环以提取所有id,但请记住,番石榴方法返回视图,并且只有在您尝试迭代时才会应用函数
,如果您不迭代,它将永远不会应用循环。
注意:请记住这是视图,如果要多次迭代,最好将内容复制到其他 List<Integer>
例如List<Integer>
ImmutableList.copyOf(Iterables.transform(students, StudentToId.INSTANCE));