我有以下信息列表。
public class TheInfo {
private int id;
private String fieldOne;
private String fieldTwo;
private String fieldThree;
private String fieldFour;
//Standard Getters, Setters, Equals, Hashcode, ToString methods
}
需要按照以下方式处理列表:
- 在重复项中选择具有最小ID的项目,并删除其他项目。在这种特殊情况下,当
fieldOne
和fieldTwo
的值相等时,条目被视为重复。 - 获取
fieldThree
和fieldFour
的连接值。
我想使用Java8 Streams处理此列表。目前我不知道如何基于自定义字段删除重复项。我认为无法使用distinct()
,因为无法更改equals/hashcode方法,因为逻辑仅适用于此特定情况。
我该如何实现这个?
TheInfo
信息封装到TheWrapper
中,并基于fieldOne
和fieldTwo
实现了equals
和hascode
,并基于id
实现了Comparable
。完成这些后,我将TheInfo
列表映射到TheWrapper
,对其进行排序,应用distinct()
,再将其映射回TheInfo
,并收集为一个列表。我目前正在测试它。 - Bilal Mirzaequals
方法并没有遵守compareTo
的契约。 - Bilal Mirza