Поток расходится () с повторяющимися объектами - PullRequest
0 голосов
/ 29 октября 2018

У меня есть базовое приложение SpringBoot 2.0.6.RELEASE. Использование Spring Initializer, JPA, встроенного Tomcat, механизма шаблонов Thymeleaf и пакета в качестве исполняемого JAR-файла с архитектурой restful У меня есть этот объект:

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());

, но, несмотря на distinct(), в списке есть повторяющиеся меню

1 Ответ

0 голосов
/ 29 октября 2018

Вы проверяете ссылочное равенство id вместо его равенства значений (подробнее об этом, например, здесь ), а id - это Long:

Класс Long оборачивает в объект значение примитивного типа long.

Измените id == menu.id на id.equals(menu.id), и оно должно работать (при условии, что здесь нет других ошибок).

...