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

新手上路,请多包涵

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

 List<Student>

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

 List<Integer>

避免使用循环,是否可以通过使用 apache 集合guava 来实现?

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

原文由 javatar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 504
2 个回答

Java 8 的实现方式:-

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

原文由 Kaushik 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用番石榴,您可以使用像这样的功能-

 private enum StudentToId implements Function<Student, Integer> {
        INSTANCE;

        @Override
        public Integer apply(Student input) {
            return input.getId();
        }
    }

您可以使用此功能将学生列表转换为 id,例如 -

 Lists.transform(studentList, StudentToId.INSTANCE);

当然它会循环以提取所有 id,但请记住 guava 方法返回视图并且函数只会在您尝试迭代时应用 List<Integer>

如果你不迭代,它永远不会应用循环。

注意:记住这是视图,如果你想多次迭代,最好将内容复制到其他一些 List<Integer>

ImmutableList.copyOf(Iterables.transform(students, StudentToId.INSTANCE));

原文由 Premraj 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题