如何使用另一个列表中的对象的属性创建新列表

2022-08-31 11:04:24

想象一下,我有一个特定对象的列表:

List<Student>

我需要生成另一个列表,包括上面列表中的:idsStudents

List<Integer>

避免使用循环,是否可以通过使用apache集合番石榴来实现这一点?

哪些方法对我的情况应该有用?


答案 1

Java 8的制作方法:-

List<Integer> idList = students.stream().map(Student::getId).collect(Collectors.toList());

答案 2

使用番石榴,您可以使用功能,例如 -

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));