【发布时间】:2019-04-01 17:25:03
【问题描述】:
我有两个 List Map:
订单
[
{
item_id=1,
item=item-1,
user_id=1
},
{
item_id=2,
item=item-2,
user_id=2
},
{
item_id=3,
item=item-3,
user_id=3
}
]
用户
[
{
user_id=1,
name=abh,
email=abh@bit.com
},
{
user_id=2,
name=pol,
email=pol@bit.com
},
{
user_id=3,
name=tre,
email=tre@bit.com
}
]
它们被初始化为
List<Map<String, String>> data
我想使用 Streams 在此 List Maps 上执行 sql 等效内连接。
我试过这个:
List<Map<String, String>> collect = leftData.stream().flatMap(t1 -> rightData.stream())
.filter(t -> t.get(joinColumnTableLeft).equals(t.get(joinColumnTableRight)))
.collect(Collectors.toList());
这给了我一个 size(users) * size(orders) 的结果,即 9。
并且收藏有orders。
但我希望将两个地图合并为一个,然后从中创建一个列表。
目前无法使用任何库。
【问题讨论】:
-
它们是如何初始化为
List<Map<String, String>> data的,你能提供它的代码吗? -
从第二个列表创建一个 Map
。然后遍历第一个列表,对于每个元素,使用 Map 按用户 ID 查找用户。你真的应该开始定义类而不是将数据存储到地图中。 -
@JBNizet 我知道,但我正在编写一个通用的 csv 解析器。因此我必须使用地图
-
好吧,照我说的做,但是使用地图而不是适当的对象。
-
我不太明白那个.. :/
标签: java java-8 java-stream