Как сгруппировать список списков по определенным критериям в Java 8JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как сгруппировать список списков по определенным критериям в Java 8

Сообщение Anonymous »

У меня есть структура данных, как показано ниже. Я пытаюсь сгруппировать объекты таким образом, как Map, где ключ — это идентификатор записи, а значение — это список групп, которым он принадлежит. Идентификатор записи всегда уникален внутри группы.

Пример: идентификатор записи «1111» принадлежит группам group1,group2,group3. Я использую старый способ Java 7 для перебора списков и проверки. Есть ли лучший способ использовать сборщики/группировки Java8 для достижения этой цели?

List, где каждый объект 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 mapEntries(List groups) {
Map entryMaps = new HashMap();
for (Group group : groups) {
for (Entry entry : group.getEntries()) {
List groupsEntryBelongs = new ArrayList();
if (groups.iterator().hasNext() && !entryMaps.keySet().contains(entry.getEntryId())) {
updateGroups(groups, entry.getEntryId(), groupsEntryBelongs, entryMaps);
}
}
}
return entryMaps;
}

void updateGroups(List groups, String id, List groupsEntryBelongs, Map entryMaps) {
for (Group group : groups) {
for (Entry entry : group.getEntries()) {
if (entry.getEntryId().equalsIgnoreCase(id)) {
groupsEntryBelongs.add(group.getId());
}
}
}
entryMaps.put(id, groupsEntryBelongs);
}


Подробнее здесь: https://stackoverflow.com/questions/532 ... -in-java-8
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»