有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用Java Lambda或streams将POJO列表转换为其ID列表

我正试图拓宽我的Java视野,并开始实际编写Java 8+代码。在这种情况下,我有一个POJO列表(每个POJO实例都有一个id : Long字段),我需要生成一个List<Long>来代表它们的所有ids。以下是我的代码,它运行得非常好:

List<Fizzbuzz> fizzbuzzes = getFizzbuzzes();
List<Long> fbIds = new ArrayList<>();
for(Fizzbuzz fb : fizzbuzzes) {
    fbIds.add(fb.getId());
}

我想知道是否有一种更“现代”的Java8+方式(lambdas或collections技巧、流媒体等)来编写这段代码。有什么想法吗?或者这是最好的吗


共 (4) 个答案

  1. # 1 楼答案

     fizzbuzzes.stream()
               .map(Fizzbuzz::getId)
               .collect(Collectors.toList())
    
  2. # 2 楼答案

    当然可以:

    fizzbuzzes.stream() 
              .map(e -> e.getId()) 
              .collect(Collectors.toList());
    
  3. # 3 楼答案

    使用Java 8流和方法引用,这样会更好:

    List<Long> fbIds = fizzbuzzes.stream().map(Fizzbuzz::getid).collect(Collectors.toList());
    
  4. # 4 楼答案

    • Stream列表Fizzbuzz
    • 把这个流映射到一个Stream<Long>
    • 最后把它收集成一个^{

    它将提供:

    List<Long> fbIds = getFizzbuzzes().stream()
                                      .map(Fizzbuzz::getId)
                                      .collect(Collectors.toList());