我想过滤一个流(),过滤器必须提供一个谓词我如何使用RxJava实现这一点,我正在使用房间持久性数据库,如果数据库还没有包含新字段,我想添加它们,我的问题是使用doesDatabaseContainSong()方法。
我是RX Java的新手,代码是Kotlin和Java的混合
// 1. ADD NEW SONGS TO DATABASE
songs.stream()
.filter(song -> !doesDatabaseContainSong(song, mViewModel))
.forEach(this::addSongToDatabase);我希望下面的函数(DoesDatabaseContainSong)返回一个布尔值,而不是返回Single< Int >
public static boolean doesDatabaseContainSong(Song song, SongViewModel model) {
int result = model.doesDatabaseContainSong(song.getId(), Type.GOOGLE_DRIVE.name());
return result != 0;
}视图模型
fun doesDatabaseContainSong(mId: String): Single<Int> {
return repository.doesDatabaseContainSong(mId)
}存储库
fun doesDatabaseContainSong(mId: String): Single<Int> {
return songDao.doesDatabaseContainSong(mId)
}“道”
@Query("SELECT COUNT(id) from song_table WHERE id = :mId")
fun doesDatabaseContainSong(mId: String): Single<Int>发布于 2019-04-23 17:57:10
DAO (已将返回类型更改为布尔值)
@Query("SELECT COUNT(id) from song_table WHERE id = :mId")
fun doesDatabaseContainSong(mId: String): Single<Boolean>存储库(将返回类型更改为布尔值)
fun doesDatabaseContainSong(mId: String): Single<Boolean> {
return songDao.doesDatabaseContainSong(mId)
}视图模型(已将返回类型更改为布尔值)
fun doesDatabaseContainSong(mId: String): Single<Boolean> {
return repository.doesDatabaseContainSong(mId)
}(已将返回类型更改为布尔值)
public static Single<Boolean> doesDatabaseContainSong(Song song, SongViewModel model) {
return model.doesDatabaseContainSong(song.getId(), Type.GOOGLE_DRIVE.name());
}现在是最终的代码:
songs
.stream()
.flatMap(doesContainSong -> doesDatabaseContainSong(song, mViewModel))
.filter(doesContainSong -> !doesContainSong)
.forEach(this::addSongToDatabase);希望这能有所帮助。
https://stackoverflow.com/questions/55775113
复制相似问题