Java 具有重复对象的流distinct()
我有一个基本的SpringBoot 2.0.6.0版本应用程序。使用Spring初始值设定项、JPA、嵌入式Tomcat、Thymeleaf模板引擎,并将其打包为具有restful体系结构的可执行JAR 我有一个目标:Java 具有重复对象的流distinct(),java,list,java-stream,collectors,Java,List,Java Stream,Collectors,我有一个基本的SpringBoot 2.0.6.0版本应用程序。使用Spring初始值设定项、JPA、嵌入式Tomcat、Thymeleaf模板引擎,并将其打包为具有restful体系结构的可执行JAR 我有一个目标: public class Menu implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @JsonIgnore private Lo
public class Menu implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@JsonIgnore
private Long id;
@Override
public int hashCode() {
return (int) (id ^ (id >>> 32));
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Menu menu = (Menu) o;
return id == menu.id;
}
...
}
我在控制器中还有一段代码:
List<Menu> favoriteMenus = new ArrayList<Menu>();
favoriteMenus.addAll(user.getFavoriteMenus());
favoriteMenus.addAll(applicationProfileService
.menusByProfile(user.getApplicationSetup().getApplicationProfile().getProfileKey()));
favoriteMenus =
favoriteMenus
.stream()
.distinct()
.collect(Collectors.toList());
List-favoriteMenus=new-ArrayList();
addAll(user.getFavoriteMenus());
favoriteMenus.addAll(applicationProfileService
.menusByProfile(user.getApplicationSetup().getApplicationProfile().getProfileKey());
favoriteMenus=
福利蒂梅努斯
.stream()
.distinct()
.collect(Collectors.toList());
但是,尽管有
distinct()
,列表中仍有重复的菜单您正在测试id
的引用相等性,而不是它的值相等性(例如更多内容),并且id
是:
Long
类将基元类型的值Long
封装在对象中
将
id==menu.id
更改为id.equals(menu.id)
,它应该可以工作(前提是这里没有其他错误)。…或者将字段类型更改为long
。