Java 8 streaming:如何将对象列表转换为其所选属性的列表

wal*_*alv 4 java java-8 java-stream

我上课了

class Person {
   // get/set omitted for simplicity
   public String firstName;
   public String lastName;
}
Run Code Online (Sandbox Code Playgroud)

我也有这样的对象列表

List<Person> list ...
Run Code Online (Sandbox Code Playgroud)

我需要使用以下流转换

List<Person> list ...
List<String> firstLastNames = list.stream()....
Run Code Online (Sandbox Code Playgroud)

所以我的List firstLastNames将包含此列表中的名字和姓氏.所以.

System.out.println(firstLastNames); // will give me -> "John", "Smith", "Jessica", "Jones".. etc.
Run Code Online (Sandbox Code Playgroud)

Tom*_*mek 14

这样的事情怎么样?

stream.stream().flatMap(p -> Stream.of(p.firstName, p.lastName)).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

  • 首先,upvote.一切都很好,但你应该删除`new Object(...)`表达式. (4认同)
  • @Oleg:你几乎不会测量任何显着的性能差异.但是如果你关心最微小的性能,循环会更快.如果你想使用流API,使用`flatMap(...).collect(Collectors.toList())`是直截了当的.另外,你在谈论哪个javadoc?`Collectors.toList()`的内部工作原理以及实际返回的`List`实现类型是故意未指定的,并且在将来的版本中甚至可能比`ArrayList`更快. (2认同)
  • @Oleg:这是一个*示例*帮助您了解用法.这并不意味着你应该总是推出你的手动收集器,尽管有一个内置的收集器用于此目的.现在*你*应该自己思考,为什么`Collectors.toList()`存在,如果建议真的是要自己重新实现该操作? (2认同)

归档时间:

查看次数:

1352 次

最近记录:

8 年,4 月 前