我在软件上有一个对象列表,希望通过一个公共字段进行排序,例如:
List<Object> obj
ID 1 Price 0.0
ID 1 Price 1.2
ID 1 Price 1.3
ID 2 Price 2.0
我可以对列表进行排序以使ID = 1的对象仅出现一次吗?在这种情况下,列表中仅保留ID = 1的第一个对象,例如:
ID 1 Price 0.0
ID 2 Price 2.0
我该如何实现?
答案 0 :(得分:1)
如果您根据equals
字段覆盖hashCode
和id
,则可以轻松计算出一系列不同的元素。
例如:
class Obj {
private int id;
private double price;
public Obj(int id, double price) {
this.id = id;
this.price = price;
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof Obj))
return false;
return this.id == ((Obj) obj).id;
}
@Override
public int hashCode() {
return Integer.hashCode(id);
}
...
}
并且:
List<Obj> result = objects.stream().distinct().collect(Collectors.toList());