Я собираю List, внутри кооторого лежит куча объектов с пустыми полями, Java, JDBC

У меня есть база данных библиотеки, там существует 2 таблицы, таблица читателей и книг. Мне нужно вывести читателя и напротив него вывести список книг, которые он взял в библиотеке, или вывести, что он вовсе не взял книги. У меня есть соответствующий метод в ДАО, где я создаю запрос в базу данных(использую jdbc), пытаюсь хранить соответствующие значения в коллекции Map<Reader, List> map = new HashMap<>(); Так вот, проблема заключается в том, что в некоторых случаях я собираю List, внутри которого лежит куча объектов с пустыми полями. И я не могу проверить список на if(books == null) или так if (books.isEmpty()), чтобы вывести напротив читателя, что у него нету книг ссылка на метод, называется findAllWithBooks(): https://pastebin.com/yCPg9PHR и там я ещё добавил код из класса Book и Menu(это из presentation layer-a)

@Override
  public Map<Reader, List<Book>> findAllWithBooks() {
    var selectAllReadersWithBooks =
        """
                SELECT reader.id, reader.name, book.name AS bookName, book.author AS authorName
                FROM reader LEFT JOIN book ON reader.id = book.reader_id
                """;
    try (var connection = DBUtil.getConnection();
        var selectAllReadersWithBooksStatement = connection.createStatement()) {
      var resultSet = selectAllReadersWithBooksStatement.executeQuery(selectAllReadersWithBooks);
      Map<Reader, List<Book>> map = new HashMap<>();
      while (resultSet.next()) {
        var book = new Book(resultSet.getString("bookName"), resultSet.getString("authorName"));
        map.computeIfAbsent(mapResultSetToReader(resultSet), k -> new ArrayList<>()).add(book);
      }
      return map;
    } catch (SQLException e) {
      throw new DaoOperationException("Error finding readers with borrowed books list!");
    }
  }

Ответы (1 шт):

Автор решения: Roman-Stop RU aggression in UA

Так как для конкретного читателя может не быть ни одной книги, то нужно это проверять. Это как раз причина того, что поля книги null.

  @Override
  public Map<Reader, List<Book>> findAllWithBooks() {
    var selectAllReadersWithBooks =
        """
                SELECT reader.id, reader.name, book.id AS bookId, book.name AS bookName, book.author AS authorName
                FROM reader LEFT JOIN book ON reader.id = book.reader_id
                """;
    try (var connection = DBUtil.getConnection();
        var selectAllReadersWithBooksStatement = connection.createStatement()) {
      var resultSet = selectAllReadersWithBooksStatement.executeQuery(selectAllReadersWithBooks);
      Map<Reader, List<Book>> map = new HashMap<>();
      while (resultSet.next()) {
        Book book = null;
        if (resultSet.getInt("bookId") != null) {
            book = new Book(
                       resultSet.getString("bookName"),
                       resultSet.getString("authorName")
            );
        }
        var books = map.computeIfAbsent(mapResultSetToReader(resultSet), k -> new ArrayList<>());
        if (book != null) {
            books.add(book);
        }
      }
      return map;
    } catch (SQLException e) {
      throw new DaoOperationException("Error finding readers with borrowed books list!");
    }
  }

Теперь у читателя, у которого нет книг список будет пустой и можно делать проверку if (books.isEmpty()).

→ Ссылка