如何通过对象的两个属性对其中的列表进行分组?
我正在使用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
列表分组,以便按id
和name
分组ocurrences
,像这样。
预期结果:
[
{
name: "Whatever"
id: 0001,
occurrences: [{
(...)
}, {
(...)
}]
},
{
name: "Whatever"
id: 0002,
occurrences: [{
(...)
}]
},
{
name: "Other thing"
id: 0002,
occurrences: [{
(...)
}]
}
]
什么是最好的实现方法?我有两个选项:
1.更改Drools规则,使我的
List<Result>
已按我需要的方式结构化。也许创建一个类,其中包含addResult
方法,该方法检查列表中的id
和name
并将出现次数添加到正确的条目。但这不是理想的,因为它会增加规则内部的复杂性。2.后处理我的
List<Result>
,使其按id
和name
分组occurrences
。但我不知道如何以优化和简单的方式实现这一点。哪种方法是最佳的?