java - 使用 Single<Boolean> 进行过滤

标签 java stream rx-java2

我想过滤一个流(),过滤器必须提供一个谓词,我如何使用 RxJava 实现这一点,我正在使用房间持久性数据库,如果数据库尚未包含新字段,我想添加新字段,我的问题是 doesDatabaseContainSong() 方法。

我是 RX Java 新手,代码是 Kotlin 和 Java 的混合体

    // 1. ADD NEW SONGS TO DATABASE
songs.stream()
        .filter(song -> !doesDatabaseContainSong(song, mViewModel))
        .forEach(this::addSongToDatabase);

我希望以下函数(doesDatabaseContainSong)返回 boolean 值,而不是返回 Single< Int >

public static boolean doesDatabaseContainSong(Song song, SongViewModel model) {
    int result = model.doesDatabaseContainSong(song.getId(), Type.GOOGLE_DRIVE.name());
    return result != 0;
}

View 模型

fun doesDatabaseContainSong(mId: String): Single<Int> {
    return repository.doesDatabaseContainSong(mId)
}

存储库

fun doesDatabaseContainSong(mId: String): Single<Int> {
    return songDao.doesDatabaseContainSong(mId)
}

DAO

@Query("SELECT COUNT(id) from song_table WHERE id = :mId")
fun doesDatabaseContainSong(mId: String): Single<Int>

最佳答案

DAO(将返回类型更改为 boolean 值)

@Query("SELECT COUNT(id) from song_table WHERE id = :mId")
fun doesDatabaseContainSong(mId: String): Single<Boolean>

存储库(将返回类型更改为 boolean 值)

fun doesDatabaseContainSong(mId: String): Single<Boolean> {
    return songDao.doesDatabaseContainSong(mId)
}

View 模型(将返回类型更改为 boolean 值)

fun doesDatabaseContainSong(mId: String): Single<Boolean> {
    return repository.doesDatabaseContainSong(mId)
}

(将返回类型更改为 boolean 值)

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

希望这有帮助。

关于java - 使用 Single<Boolean> 进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55775113/

相关文章:

java - 无法从appContext.xml : credential type conversion在springboot中创建MongoClient bean

c# - Stream.Seek(0, SeekOrigin.Begin) 或 Position = 0

java - 只要主要可观察值未发出任何值,就使用辅助/备用可观察值

android - 通过改造在网络调用上返回 Observable

java - 这是什么意思!(x == 1)

java - 如果当前线程崩溃,读写锁会发生什么

linux - 如何将 qsub 输出流定向到 pwd 而不是 home

java - 如何通过 Akka Streams for java 创建和使用 Pair 流?

android - 如何将 Realm 与 RxJava2 一起使用

Java/Scala 双向 MD5