我有一个数据结构如下。我想以这样的方式对对象进行分组:
例如:entryId“1111”属于group1,group2,group3。我正在使用旧的Java 7方法迭代列表并检查。是否有使用Java8 Collectors/grouping来实现此目标的最佳方法。
因此,期望的输出结果是这样的:
Map<String,List<String>>
,其中键是entryId,值是它所属的组列表。entryId在组内始终是唯一的。例如:entryId“1111”属于group1,group2,group3。我正在使用旧的Java 7方法迭代列表并检查。是否有使用Java8 Collectors/grouping来实现此目标的最佳方法。
List<Group>
,其中每个Group对象都有一个Entry对象列表。 [
{
"id":"group1",
"entries":[
{
"entryId":"1111",
"name":"test1"
},
{
"entryId":"2222",
"name":"test2"
},
{
"entryId":"3333",
"name":"test3"
}
]
},
{
"id":"group2",
"entries":[
{
"entryId":"4444",
"name":"test1"
},
{
"entryId":"1111",
"name":"test2"
},
{
"entryId":"2222",
"name":"test3"
}
]
},
{
"id":"group3",
"entries":[
{
"entryId":"1111",
"name":"test1"
},
{
"entryId":"5555",
"name":"test2"
},
{
"entryId":"3333",
"name":"test3"
}
]
}
]
因此,期望的输出结果是这样的:
[
{
"1111":[
"group1",
"group2",
"group3"
]
},
{
"2222":[
"group1",
"group2"
]
},
{
"3333":[
"group1",
"group3"
]
},
{
"4444":[
"group2"
]
},
{
"5555":[
"group3"
]
}
]
我目前正在使用以下方式。虽然它能够按预期工作,但在Java 8中是否有更简单的方法可以实现这一点。
public Map<String, List<String>> mapEntries(List<Group> groups) {
Map<String, List<String>> entryMaps = new HashMap<>();
for (Group group : groups) {
for (Entry entry : group.getEntries()) {
List<String> groupsEntryBelongs = new ArrayList<>();
if (groups.iterator().hasNext() && !entryMaps.keySet().contains(entry.getEntryId())) {
updateGroups(groups, entry.getEntryId(), groupsEntryBelongs, entryMaps);
}
}
}
return entryMaps;
}
void updateGroups(List<Group> groups, String id, List<String> groupsEntryBelongs, Map<String, List<String>> entryMaps) {
for (Group group : groups) {
for (Entry entry : group.getEntries()) {
if (entry.getEntryId().equalsIgnoreCase(id)) {
groupsEntryBelongs.add(group.getId());
}
}
}
entryMaps.put(id, groupsEntryBelongs);
}