java基于属性获取列表中的重复元素,而不使用for循环
我需要得到一个有一个公共属性的重复对象列表
该列表具有以下提到的值
SomeType someObject1 = new SomeType ("hello1", "1");
SomeType someObject2 = new SomeType ("hello1", "2");
SomeType someObject3 = new SomeType ("hello", "1");
SomeType someObject4 = new SomeType ("hello2", "2");
SomeType someObject5 = new SomeType ("hello2", "1");
SomeType someObject6 = new SomeType ("hello3", "2");
SomeType someObject7 = new SomeType ("hello4", "1");
SomeType someObject8 = new SomeType ("hello5", "2");
我需要获取共享公共第一个参数的对象 在本例中,someObject1、someObject2、someObject4、someObject5 在一个单独的列表中
是否有不在for或while循环中迭代的api可用
# 1 楼答案
我相信你想用
HashSet
首先修改:
SomeType
,使equals
和hashCode
只使用第一个字段。假设你把它叫做^{field1
相等,{true
hashCode
应该返回field1.hashCode
这将导致
SomeType
的实例与field1
的相同值被放入HashSet
的相同存储桶中:如果希望保留所有实例,但要聚合它们,请使用另一个集合的
HashSet
,例如HashSet<ArrayList<SomeType>>
当然,如果我正确理解了你的问题
# 2 楼答案
据我所知,你想要所有的副本。一个简单的方法是使用Set集合,它不允许重复,并检查未成功的插入。要实现这一点,需要覆盖对象中的equals方法
# 3 楼答案
看看Guava's Multimaps.然后你可以做这样的事情:
生成的多重映射someTypesByName本质上是名称到具有该名称的SomeType对象列表的映射
# 4 楼答案
根据契约实现
Object.equals(Object)
和Object.hashCode(
),这样两个输入值就决定了等式和hashCode。将所有对象放入HashMap<SomeType, SomeType>
把自己当成钥匙。然后,当您需要它们时,使用新对象作为键查询哈希映射,您将获得所需的对象