我有一个这样的自定义适配器:
private List<User> items = new ArrayList<>();
private Context context;
public UserSpinnerAdapter(@NonNull Context context, @LayoutRes int resource, @NonNull
List<User> objects) {
super(context, resource, objects);
this.items = objects;
this.context = context;
}
当我想找到来自web api的对象User的位置时,public int getPosition(@Nullable User item)
的结果总是 -1 。我认为这是传递给适配器的项目的beacaus与内部的适配器用户列表不同,尽管每个东西都相同但指向另一个内存点。
那么我如何比较具有相同属性但实际上是分离的两个对象?
答案 0 :(得分:3)
您应该为#include <iostream>
struct Stack {
static const int capacity = 10000;
void push(float x) { data[sp++] = x; }
float pop() { return data[--sp]; }
float data[capacity];
int sp = 0;
};
Stack &operator<<(Stack &s, float x) {
s.push(x);
return s;
}
Stack &operator>>(Stack &s, float &x) {
x = s.pop();
return s;
}
int main() {
Stack stack;
stack << 4.0 << 5.0 << 6.0;
float x, y, z;
stack >> x >> y >> z; //here pop 3 elements to x,y,z
std::cout << x << " " << y << " " << z << std::endl;
}
对象实施equals
/ hashCode
答案 1 :(得分:1)
您应该覆盖您比较的对象的equals
/ hashCode
方法。您可以在班级中按Alt+Insert
轻松完成,然后选择equals() and hashCode()
。如果您的班级有另一个自定义类型的字段,例如
public class User {
...
private Location location;
...
}
您还必须为位置
实施equals
/ hashCode