Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有重复对象的流distinct()_Java_List_Java Stream_Collectors - Fatal编程技术网

Java 具有重复对象的流distinct()

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

我有一个基本的SpringBoot 2.0.6.0版本应用程序。使用Spring初始值设定项、JPA、嵌入式Tomcat、Thymeleaf模板引擎,并将其打包为具有restful体系结构的可执行JAR 我有一个目标:

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