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) -> user.getAddress()
可以写成user -> user.getAddress()
或者只是User::getAddress
【参考方案1】:
你需要将collect
你的流放到一个列表中:
List<String> adresses = users.stream()
.map(User::getAdress)
.collect(Collectors.toList());
有关不同Collectors
的更多信息,请访问documentation
User::getAdress
只是(User user) -> user.getAdress()
的另一种写法,也可以写成user -> 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 Lambda 将对象列表转换为 Map<Object, Object>