Как сгруппировать список внутри объекта по двум атрибутам объекта?
Я использую Drools 7.9.0 и Java 8. У меня есть класс Result
, который используется в качестве возврата ккаждое соответствующее правило Drools.
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
@Data
@NoArgsConstructor
public class Result implements Serializable {
private Integer id;
private String name;
private List<Occurrences> occurrences = new ArrayList<>();
public void addOccurrence(Occurrences occurrence) {
this.occurrences.add(occurrence);
}
}
После выполнения Drools я получаю List<Result>
.Преобразование в JSON выглядит следующим образом.
ТЕКУЩИЙ РЕЗУЛЬТАТ:
[
{
name: "Whatever"
id: 0001,
occurrences: [{
(...)
}]
},
{
name: "Whatever"
id: 0001,
occurrences: [{
(...)
}]
},
{
name: "Whatever"
id: 0002,
occurrences: [{
(...)
}]
},
{
name: "Other thing"
id: 0002,
occurrences: [{
(...)
}]
}
]
Мне нужно сгруппировать мой список Result
с, чтобы ocurrences
былисгруппированы по id
и name
, вот так.
ОЖИДАЕМЫЙ РЕЗУЛЬТАТ:
[
{
name: "Whatever"
id: 0001,
occurrences: [{
(...)
}, {
(...)
}]
},
{
name: "Whatever"
id: 0002,
occurrences: [{
(...)
}]
},
{
name: "Other thing"
id: 0002,
occurrences: [{
(...)
}]
}
]
Каков наилучший способ реализовать это?У меня есть два варианта:
- Изменить правила Drools, так что мой
List<Result>
уже структурирован так, как мне нужно.Может быть, создать класс с addResult
методом, который проверяет список на id
и name
и добавить вхождение в нужную запись.Но это не идеально, потому что это увеличит сложность внутри правил. - Постобработка my
List<Result>
, поэтому он группирует occurrences
по id
и name
.Но я понятия не имею, как сделать это оптимизированным и простым способом.
Какой лучший способ сделать второй вариант?