java.util.Set,但在字段上具有自定义约束

java.util.Set,但在字段上具有自定义约束,java,collections,Java,Collections,我想知道是否有一种很好的方法来设置对象,但约束自定义字段 例如,我需要POJO的集: class MyPojo { private String name; private Map<Object, Object> stuff; //getters, setters, constructor } 类MyPojo{ 私有字符串名称; 私人地图资料; //getter、setter、构造函数 } 我想有一个集合,它们的名称是唯一的。 我可以基于name属性实现hash和eq

我想知道是否有一种很好的方法来设置对象,但约束自定义字段

例如,我需要POJO的

class MyPojo {
  private String name;
  private Map<Object, Object> stuff;
  //getters, setters, constructor
}
类MyPojo{
私有字符串名称;
私人地图资料;
//getter、setter、构造函数
}
我想有一个
集合
,它们的名称是唯一的。 我可以基于
name
属性实现
hash
equals
,但是我不能使用真正的
equals
来比较它们


是否有一些很好的解决方法,或者可能是Guava/apache commons集合?

您可以使用
HashMap
而不是
集合。这样,每个
名称
最多可以在
映射中出现一次

您可以创建包装器对象。这就像一个装饰图案。使用不同的散列实现包装原始对象,然后将在集合中使用包装的对象。

这是否编译私有映射内容?当你想要比较它们时,你能使用一个定制的比较器吗?否则,键入
name
HashMap
是否合适?@JunedAhsan是的,fixedOk,但是如果我想要由两个字段组成呢?那么,逻辑也就太复杂了bulky@IgorKonoplyanko如果您的密钥变成复合的,则应该考虑为密钥-<代码> MyPojoKey < /COD>或<代码> MyPoJoID(这将覆盖Hash码和均等)创建一个单独的类——然后使用<代码> MAP。