У меня есть структура данных, как показано ниже. Я пытаюсь сгруппировать объекты таким образом, как 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
Как сгруппировать список списков по определенным критериям в Java 8 ⇐ JAVA
Программисты JAVA общаются здесь
-
Anonymous
1736879951
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);
}
Подробнее здесь: [url]https://stackoverflow.com/questions/53255091/how-to-group-list-of-lists-using-a-certain-criteria-in-java-8[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия