- 我有方法
personViewModel.getNoobs();
从房间数据库返回List<Person>
; - 我的活动中有了新的
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()
的用法。