【问题标题】:Java 8 lambda create list of Strings from list of objectsJava 8 lambda从对象列表创建字符串列表
【发布时间】: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

标签: java arraylist java-8 java-stream


【解决方案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。另外,您的问题与现有问题有何不同?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-21
      • 1970-01-01
      • 1970-01-01
      • 2011-04-20
      • 2012-05-22
      • 1970-01-01
      相关资源
      最近更新 更多