Dictionary Java8流将一组字段转换为一个具有不同值的小集

Dictionary Java8流将一组字段转换为一个具有不同值的小集,dictionary,java-stream,distinct,Dictionary,Java Stream,Distinct,我有两门课Istaff和IstaffZone 公共类Istaff{ @身份证 @GeneratedValue(策略=GenerationType.IDENTITY) 私人长id; 私有字符串位置; 私人社区; 私有字符串名; 私有字符串lastName; 私有字符串登录; 私有字符串位置ID; [...] } 公共类开放区{ @身份证 @GeneratedValue(策略=GenerationType.IDENTITY) 私人长id; 私有字符串登录; 私有字符串位置ID; [...] } 还

我有两门课
Istaff
IstaffZone

公共类Istaff{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
私有字符串位置;
私人社区;
私有字符串名;
私有字符串lastName;
私有字符串登录;
私有字符串位置ID;
[...]
}
公共类开放区{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
私有字符串登录;
私有字符串位置ID;
[...]
}
还有一组
Istaff
,我想把它转换成一组不同的
IstaffZone
,只得到不同的值

我试着做一些像。。。但结果值并不明显

Set lStaffZones=new HashSet();
lStaffZones=listStaffT.stream().map(p->
新的IstaffZone(p.getLogin(),p.getLocationID())
.distinct()
.collect(Collectors.toCollection(HashSet::new));

List lStaffZones=new ArrayList();
lStaffZones=listStaffT.stream().map(p->
新的IstaffZone(p.getLogin(),p.getLocationID())
.distinct()
.collect(Collectors.toList());

有什么建议吗?

如果您需要能够根据具体情况进行区分,或者您不想有朝一日实现哈希代码,您也可以使用以下方法。使用此方法,您可以根据具体情况选择单个字段/多个字段作为键/哈希代码,还可以在不同的冲突中选择所需的对象

List lStaffZones=newarraylist(listStaffT.stream())
.map(p->new-IstaffZone(p.getLogin(),p.getLocationID())
.collect(collector.toMap)(
(iStaffZone)->{
//返回唯一的密钥/哈希代码
//如果只是一个字段,只需返回该字段
返回istaftZone.getLogin+istaftZone.getLocationID();
},
i->i,//或Function.identity()
(iStaffZone1,iStaffZone2)->x==null?y:x)
//如果iStaffZone1和iStaffZone2或相同,请选择要保存的
.values());
//toMap(a->返回键,b->返回值,(a,b)->返回要保存的元素(如果相同)

您是否正确地实现了
equals
hashCode
?@polygenme否。您如何正确地实现hashCode?设置还是列表更好?
List
替代了一个动态大小的索引数组,允许复制
Set
只保留唯一的元素,其
HashSet
实现需要正确的
hashCode
等于
实现。这是一篇好文章的开头: