我有一个带有Map列表的对象。每张Map如下所示:
{
id: "something",
link: "someLink"
}
我正在尝试创建一个包含Map中所有id的数组列表。我可以用一个简单的循环
List<String> Ids = new ArrayList<>();
List<Map<String, String>> maps = pojo.getMaps();
for(Map<String, String> map: maps) {
Ids.add(map.get("id"));
}
但是如何使用Java8流在一行中实现这一点呢?我从来没有用过Map,所以我迷路了。我想应该是这样的,但我真的不知道
List<String> ids = pojo.getMaps().stream().map(Map.Entry:: ???? ).collect(Collectors.toList())
2条答案
按热度按时间vojdkbi01#
pojo.getMaps().stream()
到目前为止,还不错。你现在有一股Map<String, String>
物体。我们只需要从这里拿到钥匙。那么,给你一个奇怪的Map的东西,我们怎么把它变成关键值呢?看起来像是一件小事
map.get("id")
做那工作,不是吗?让我们把它放在lambda中:
pojo.getMaps().stream().map(theMap -> theMap.get("id"))
现在我们有一个Stream<String>
有身份证。不过,大注!
事实上,从一个看起来像对象的map对象开始就是一个巨大的代码气味。最有可能的情况是,您应该回到项目中的几个步骤,并解决这个问题。您真的应该有一个类来表示这个链接概念:
从那里开始:
注:以上是Lombok山的
@Value
.功能只是一种工具
注意,不需要重写代码来“使用Java8特性”。比较:
使用:
代码量差不多。
bpsygsoo2#
您可以使用
id
在循环中以同样的方式从Map开始。在这里.map()
用于转换Map<String, String>
至String
表示将Map转换为键的值id
```List ids = pojo.getMaps().stream() // Stream<Map<String, String>>
.map(e -> e.get("id")) // Stream
.collect(Collectors.toList());