Java 8 lambda从对象列表创建字符串列表

Posted

技术标签:

【中文标题】Java 8 lambda从对象列表创建字符串列表【英文标题】:Java 8 lambda create list of Strings from list of objects 【发布时间】:2019-01-15 18:41:38 【问题描述】:

我有以下问题:

如何将以下代码转换为 Java 8 lambda 样式?

List<String> tmpAdresses = new ArrayList<String>();
for (User user : users) 
    tmpAdresses.add(user.getAdress());

不知道从以下开始:

List<String> tmpAdresses = users.stream().map((User user) -> user.getAdress());

【问题讨论】:

你快到了。假设您的地图 lambda 返回 String,只需将 .collect(Collectors.toList()) 添加到 map(...) 注意:(User user) -&gt; user.getAddress() 可以写成user -&gt; user.getAddress() 或者只是User::getAddress 【参考方案1】:

你需要将collect你的流放到一个列表中:

List<String> adresses = users.stream()
    .map(User::getAdress)
    .collect(Collectors.toList());

有关不同Collectors 的更多信息,请访问documentation

User::getAdress只是(User user) -&gt; user.getAdress()的另一种写法,也可以写成user -&gt; user.getAdress()(因为User的类型会被编译器推断出来)

【讨论】:

【参考方案2】:

它扩展了你的想法:

List<String> tmpAdresses = users.stream().map(user ->user.getAdress())
.collect(Collectors.toList())

【讨论】:

如果它比另一个更好/替代,您应该添加一个新答案。解释它如何更好。 这确实有助于从 List 中获取它,谢谢。【参考方案3】:

另一种使用 lambda 收集器的方法,如上述答案

 List<String> tmpAdresses= users
                  .stream()
                  .collect(Collectors.mapping(User::getAddress, Collectors.toList()));

【讨论】:

【参考方案4】:

您可以使用它来将Long 转换为String

List<String> ids = allListIDs.stream()
                             .map(listid-> String.valueOf(listid))
                             .collect(Collectors.toList());

【讨论】:

不过,这并不试图回答 OP 的问题。 OP 明确要求将User 映射到其adress。另外,您的问题与现有问题有何不同?

以上是关于Java 8 lambda从对象列表创建字符串列表的主要内容,如果未能解决你的问题,请参考以下文章

从 java 8 流中的列表中过滤值

Java 8 lambda 从列表中获取和删除元素

如何使用 Java 8 Lambda 将对象列表转换为 Map<Object, Object>

java 8中列表对象多条件排序

如果使用我的服务使用Java 8 lambda / streams列表不为空,如何从列表中删除每个元素

lambda 中的 Java 8 lambda 无法从外部 lambda 修改变量