循环内的领域 executeTransaction()?

Realm executeTransaction() inside a loop?

我想知道我是否可以优化下面的代码,或者我是否应该不再打扰?

  1. 我是否需要第一个 if,我可以在其中检查所有项目的数量?会有帮助吗?
  2. 我应该在 for 循环中执行 realm.executeTransaction() 吗?我认为这样更好,因为 executeTransaction() 可能很昂贵(? - 不确定)。另一方面,如果我将第一个 if 放在 for 循环中,我可以省略它。

基本上,我从 Realm 中删除了我的一些项目:

Realm realm = Realm.getDefaultInstance();
if(realm.where(Alert.class).notEqualTo("exchange", AVERAGE_EXCHANGE).count() > 0) {
    realm.executeTransaction(r -> {
        for (Alert alert : realm.where(Alert.class).notEqualTo("exchange", AVERAGE_EXCHANGE).findAll()) {
            NetworkUtils.deleteAlertFromServer(alert);
            alert.deleteFromRealm();
        }
    });
}
realm.close();

回答您的问题:

  1. 你不需要if。只做交易里面的逻辑。

  2. 方法executeTransaction开销大,事务内部循环也是如此

你可以这样做:

realm.executeTransaction(r -> {
    RealmResults<Alert> alerts = realm.where(Alert.class).notEqualTo("exchange", AVERAGE_EXCHANGE).findAll();
    for (Alert alert : alerts) {
        NetworkUtils.deleteAlertFromServer(alert);
    }
    alerts.deleteAllFromRealm();
});