如何从room数据库接收5个随机对象并将它们添加到新的arraylist

vnjpjtjt  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(392)

我有办法 personViewModel.getNoobs(); 它回来了 List<Person> 从房间数据库;
我有新的 ArrayList<Person> currentNoobList; 在我的活动中。
我需要从数据库中随机抽取5个人,将他们添加到 currentNoobListonCreate() .
据我所知,我需要 .observe 为了从中得到随机的物体 List<Person> 我用这个方法得到的 getNoobs() ; 但是我不能理解如何正确地编写这个代码。你能帮忙吗?
谢谢!

umuewwlo

umuewwlo1#

如果您使用的是java 8以后的版本,只要列表中有>=5个元素,这样的操作就可以了:

List<Person> personList = personViewModel.getNoobs();
Random random = new Random();
IntStream.range(0,5).forEach(val ->
              currentNoobList.add(personList.remove(random.nextInt(personList.size()))));

如果您不能使用Java8,这个答案可能会派上用场。
假设您使用的是room数据库,您可以在dao接口中添加一个带注解的方法存根,并进行适当的更改,这样您就可以通过数据库直接获得结果。在你的刀里有这样的东西:

@Query("SELECT * FROM person ORDER BY RANDOM() LIMIT 5")
    public List<Person> getFiveRandomPersons();

通常,观察者会 observe 主题;检查观察者模式。鉴于信息不多,我相信你正在使用 Livedata 自从你提到 .observe 在房间数据库的上下文中。这个文档和这个代码实验室可能会让您对 observe()

相关问题