Поиск ArrayList с несколькими полями, используя только одно поле из другого ArrayList

Если есть ArrayList вместо moviesAvailable и список принимает title, year, genre, price. Как я могу получить список фильмов, используя ArrayList из genres?

В классе Movie есть метод toString, который распечатывает фильмы. Когда я запускаю код, все, что находится за оператором if, не выполняется, потому что условие возвращается как ложное.

Вы можете ясно видеть, что вы вызываете метод «равно» Genre, но вы не переопределили его, поэтому вы используете метод по умолчанию, что неверно.

vc73 10.05.2019 16:19
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
131
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вам нужно переопределить метод equals в классе Genre, чтобы условие работало, см. код ниже.

private String name;

Genre(String name){
    this.name = name;
}
public boolean hasType(String genre) {

    return genre.equals(this.name);
}

public boolean equals(Object o) {
   if (!(o instanceof Genre)) {
      return false;
   }
   return this.name.equals(((Genre)o).name);
}

лучшей реализацией будет: return (o instanceof Genre) ? ((Genre) o).name.equals(this.name) : false;

vc73 10.05.2019 16:21
Ответ принят как подходящий

Вам нужно переопределить equals() в вашем классе Genre, чтобы вы могли сравнивать экземпляры этого класса друг с другом.

Вот быстрая реализация, которую можно легко расширить для дополнительных функций:

@Override
public boolean equals(Object o) {
    if (!(o instanceof Genre)) {
        return false;
    }
    return ((Genre) o).name.equals(this.name);
}

Ваш метод также не является нулевым. new Genre(null).equals(new Genre(null)) генерирует исключение NullPointerException.

Samuel Philipp 10.05.2019 16:49

@SamuelPhilipp "Вот быстрая реализация, который может легко расширяется для дополнительных функций"

ruohola 10.05.2019 16:50

Этот метод работает, это единственный способ решить проблему или есть что-то, что я могу изменить в коде, чтобы он работал?

T Dizzle 10.05.2019 16:51

@TDizzle Переопределение метода equals() — это именно то, что нужно вашему коду.

ruohola 10.05.2019 16:51

Другие вопросы по теме