Создание глобально доступного списка после выполнения - PullRequest
0 голосов
/ 01 марта 2020

У меня есть данные, которые я извлекаю из базы данных и затем добавляю в список с list1.add(). У Списка 1 будет своя собственная категория предметов, например, Sciencebooks, у Списка 2 будет Fictionbooks, у Списка 3 будет Cosmeticbooks, и т. Д. c. Проблема в том, что я не знаю, сколько списков будет с самого начала, и размер базы данных может увеличиться в любой момент времени с list1, list2, list3, list4, ... list25 ... et c, поэтому жесткое кодирование каждого экземпляра нового Списка не будет работать, особенно если к ним нужно обращаться глобально.

Если данные из категории, в которой есть элемент как book_type: sciencebook, из того, что я знаю, я не могу создать и назвать список переменной List<Object> (book_type value from data) = new ArrayList<> при получении данных.

Я не хочу создавать один основной список со списком, потому что тогда, если я попытаюсь упорядочить индекс каждой категории, когда мне нужно будет добавить новые элементы в отдельные категории, это увеличит число индексов. не нужно набирать go путем увеличения каждого индекса один за другим для одного длинного списка по сравнению с отдельными списками. В дополнение к этому, я не хочу, чтобы очень длинный список должен был циклически / l oop проходить только для поиска по категории.

Как я могу go пометить списки на основе категории и сделать их доступными по всему миру?

Ответы [ 2 ]

1 голос
/ 01 марта 2020

Другим решением было бы вместо этого использовать шаблон службы, обычно встречающийся в Spring, чтобы легко поддерживать каждый список книг. Самое замечательное в этом то, что вы можете легко добавить функциональность в интерфейс, затем использовать шаблон адаптера, чтобы создать функциональность один раз, а затем создать новый сервис, когда вам это нужно.

Другим важным аспектом этого является то, что вы можете использовать библиотеки инъекций, такие как guice, чтобы легко управлять единичными экземплярами этих файлов, если хотите.

    interface Book {
        void read();
    }

    static class ScienceBook implements Book {

        @Override public void read() {
            System.out.println("Science book!");
        }
    }

    static class FictionBook implements Book {
        @Override public void read() {
            System.out.println("Fiction book!");
        }
    }

    interface BookService<B extends Book> {

        List<B> books();

    }

    static abstract class BookServiceAdapter<B extends Book> implements BookService<B> {

        private final List<B> books;

        protected BookServiceAdapter(List<B> books) {
            this.books = books;
        }

        @Override
        public List<B> books() {
            return books;
        }

    }

    static class FictionBookService extends BookServiceAdapter<FictionBook> {

        protected FictionBookService(List<FictionBook> books) {
            super(books);
        }

    }

    static class ScienceBookService extends BookServiceAdapter<ScienceBook> {

        protected ScienceBookService(List<ScienceBook> books) {
            super(books);
        }

    }

    public static void main(String[] args) {
        BookService<FictionBook> fictionBookService = new FictionBookService(Collections.singletonList(new FictionBook()));

        BookService<ScienceBook> scienceBookService = new ScienceBookService(Collections.singletonList(new ScienceBook()));

        fictionBookService.books().forEach(System.out::println);

        scienceBookService.books().forEach(System.out::println);
    }
1 голос
/ 01 марта 2020

Одним из решений этого может быть использование карты, в которой ключами являются типы книг, а значением - список книг.

Проблема с этим решением состоит в том, что, хотя вы решаете свою первоначальную проблему -создание подобных списков, есть стирание типа, так как мы не можем точно знать, какой тип книги хранится для каждого ключа на карте.

interface Book {
    void read();
}

class ScienceBook implements Book {
    @Override void read() { }
}

class FictionBook implements Book {
    @Override void read() { }
}
enum BookType {
    SCIENCE,
    FICTION;
}

Map<BookType, List<? extends Book>> books = new HashMap<>();

List<Book> books = books.get(BookType.SCIENCE);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...