public class Foo{
private final int A;
private final int B;
public boolean equals(Object o){
//type check omitted
return A==o.A && B==o.B;
}
}
Run Code Online (Sandbox Code Playgroud)
我想要这样的另一种.equals()方法
public boolean equals(Object o){
return A==o.A;
}
Run Code Online (Sandbox Code Playgroud)
首先使用A,B字段创建Foo对象,然后我想将它们发送到Set<E>使用第二个equals()方法的仅仅比较字段A的情况.
我知道我可以创建只有A字段的新对象,但开销会很大.有什么建议?
使用组合,您可以创建一个FooWrapper提供自定义实现的类,equals并将其添加到集合中:
public class FooWrapper {
public final Foo foo; //constructor omitted
public boolean equals(Object other) {
//type check omitted here too
return foo.A == other.foo.A;
}
//hashCode omitted, but you need that too
}
Run Code Online (Sandbox Code Playgroud)
遗憾的是,使用Java Collections API无法告诉集合使用equals除上述方法之外的自定义计算或子类化和重写equals().
令我感到震惊的是,您可以使用Map<Integer, Foo>替代,使用foo.A键foo作为键和值(从而将其限制为唯一值A).虽然没有更多的背景,我无法告诉你这是否合适.