首页 > 解决方案 > 运行时实例化全局可访问列表

问题描述

我有从数据库中检索的数据,然后使用list1.add(). List 1 将有自己的项目类别,例如Sciencebooks, List2 将有Fictionbooks,List3 将有Cosmeticbooks,等等。我不知道从一开始会有多少个列表并且数据库可以在任何给定时间增加大小的问题list1, list2, list3, list4,... list25... 等等,所以硬编码一个新 List 的每个实例是行不通的,特别是如果它们必须被全局访问。

如果类别中的数据具有book_type: sciencebook,据我所知,我无法List<Object> (book_type value from data) = new ArrayList<>在检索数据时创建并将列表命名为变量。

我不想用 List 创建一个主列表,因为如果我尝试保持每个类别的索引组织,当我需要将新项目添加到单独的类别时,这会增加索引计数,我不想拥有为一个长列表与单独的列表逐一增加每个索引。除此之外,我不希望一个很长的列表必须循环/循环才能检索类别。

如何根据类别标记列表并使它们在全球范围内可用?

标签: javaandroidandroid-studioarraylist

解决方案


对此的一种解决方案可能是使用 Map ,其中键是书籍类型,值是书籍列表。

这个解决方案的问题在于,尽管您解决了重新创建类似列表的初始问题,但存在类型擦除,因为我们无法确切知道地图中每个键存储的书籍类型。

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

推荐阅读