我有一个具有Set
的对象。每个Set
对象都有另一个对象,其中也有Set
对象。
class GroupVO {
int id;
Set<MasterVO> master; // This should be changed as Map<masterId, MasterVO>
//getter, setter
}
class MasterVO {
int masterId;
Set<SlaveVO> slave; // This should be changed as Map<slaveId, SlaveVO>
//getter, setter
}
class SlaveVO {
int slaveId;
String title;
String description;
//getter, setter
}
我想将这些Set
转换为Map
。
我可以将其转换为第一级地图。但是,我不知道如何将第二个“设置”转换为Map
。
GroupVO groupVO = new GroupVO();
Map<Integer, MasterVO> masterMap = groupVO.getMaster().stream()
.collect(Collectors.toMap(MasterVO::getMasterId, Function.identity()));
我需要访问Function.identity()
对象而不是mastervo
,在该对象中,我必须将所有Set<Slave>
转换为SlaveMap
请提出建议。
我需要它,
Map<Integre, MasterVO>
。如果我得到MasterVO
之类的masterMap.get(101)
对象,则它应该包含SlaveMap
。
答案 0 :(得分:0)
如果我正确理解了这个问题,则需要一个Map<Integer,Map<Integer,SlaveVO>>
,其中外部Map
的密钥是主ID,内部Map
的密钥是从ID。
我建议通过使用Map
获得所有MasterVO,SlaveVO对中的flatMap
来创建Stream
。然后,您可以通过主ID将此Stream
的元素进行分组,并使用Collectors.toMap
创建内部的Map
。
Map<Integer,Map<Integer,SlaveVO>>
= groupVO .getMaster()
.stream()
.flatMap(m -> m.getSlave()
.stream()
.map(s -> new SimpleEntry<MasterVO,SlaveVO>(m,s)))
.collect(Collectors.groupingBy(e -> e.getKey().getID(),
Collectors.toMap(e -> e.getValue().getID(),
Map.Entry::getValue)));