如何从房间数据库中接收 5 个随机对象并将它们添加到新的 ArrayList


  1. 我有方法personViewModel.getNoobs();从房间数据库返回List<Person>;
  2. 我的活动中有了新的ArrayList<Person> currentNoobList;

我需要从数据库中随机获取 5 个人员并将它们添加到onCreate()currentNoobList中。

据我所知,我需要使用.observe才能从我使用方法getNoobs()获得的List<Person>中获取随机对象; 但我无法理解如何正确编写此代码。你能帮忙吗?

谢谢!

如果您使用的是 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()))));

如果你无法使用Java 8,这个答案可能会派上用场。

鉴于您使用的是房间数据库,您可以在 DAO 界面中添加一个带注释的方法存根并进行适当的更改,以便您可以直接通过数据库获取结果。在你的 DAO 中像这样的东西:

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

通常,观察者会observe一个主题;结帐观察者模式。鉴于信息不多,我相信您正在使用Livedata,因为您在房间数据库的上下文中提到了.observe。本文档和本 Codelab 可能会让您了解observe()的用法。

最新更新