【发布时间】:2017-11-28 03:00:31
【问题描述】:
我有List<Object[]>inner join MySQL查询,我需要创建一个map键id和值object强>。
下面的代码有效,但如何使用 Streams 做到最好?
Map<Object, List<Object[]>> convert(List<Object[]> objects) {
Map<Object, List<Object[]>> objectListMap = objects.stream()
.collect(Collectors.toMap(obj -> obj[0], obj -> {
List<Object[]> list = new ArrayList<>();
list.add(obj);
return list;
}, (obj1, obj2) -> {
obj1.addAll(obj2);
return obj1;
}));
return objectListMap;
}
Object[] objects structure:
objects[0] = person id
...
objects[10] = event id
...
objects[15] = event name
这个查询找到了所有访问过该事件的人,但是objects数组中从0到10的索引可能是一样的,11-15总是变化的。
我想合并所有具有相同 id (objects[0]) 的对象列表。
next 中的每个值 地图 > 转换为 POJO:
PersonWithEvent converToEntity(List<Object[]> objects) {
Optional< PersonWithEvent > personWithEvent =
objects.stream()
.findFirst().map(obj -> {
PersonWithEvent p = new PersonWithEvent();
p.setId((Integer) obj[0]);
...
return p;
});
personWithEvent.ifPresent(p -> {
List<PersonEvent> personEvents = objects.stream()
.map(obj -> {
PersonEvent pe = new PersonEvent();
pe.setName((String) obj[2]);
...
return pe;
})
.collect(Collectors.toList());
p.setPersonEvents(personEvents);
});
return personWithEvent.get();
是否可以为一个流做到这一点?
【问题讨论】:
-
你能解释一下想要的结构吗?从您的代码中分辨出来并不容易。你打算如何转换
List<Object[]>?地图的键和值是什么?merge函数应该做什么? -
我是否更正了每个
Object[]数组在索引0处都有一个id 并且您想将此id 映射到其余的整个数组,例如objects[0] => objects。此外,您还想合并所有具有相同 id (objects[0]) 的对象列表。 -
是的,我想合并所有具有相同 id (objects[0]) 的对象列表。
标签: java stream java-stream