rx.Observable.switchIfEmpty()方法的使用及代码示例

x33g5p2x  于2022-01-25 转载在 其他  
字(11.0k)|赞(0)|评价(0)|浏览(122)

本文整理了Java中rx.Observable.switchIfEmpty()方法的一些代码示例,展示了Observable.switchIfEmpty()的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。Observable.switchIfEmpty()方法的具体详情如下:
包路径:rx.Observable
类名称:Observable
方法名:switchIfEmpty

Observable.switchIfEmpty介绍

暂无

代码示例

代码示例来源:origin: hidroh/materialistic

@WorkerThread
@Override
public void parse(String itemId, String url) {
  Observable.defer(() -> fromCache(itemId))
      .subscribeOn(Schedulers.immediate())
      .switchIfEmpty(fromNetwork(itemId, url))
      .map(content -> AndroidUtils.TextUtils.equals(EMPTY_CONTENT, content) ? null : content)
      .observeOn(Schedulers.immediate())
      .subscribe();
}

代码示例来源:origin: jooby-project/jooby

/**
 * Get an entity/document by ID. The unique ID is constructed via
 * {@link N1Q#qualifyId(Class, Object)}.
 *
 * If the entity is found, a entity is returned. Otherwise a
 * {@link DocumentDoesNotExistException}.
 *
 * @param entityClass Entity class.
 * @param id Entity id.
 * @param mode Replica mode.
 * @param <T> Entity type.
 * @return An entity matching the id or an empty observable.
 */
default <T> T getFromReplica(final Class<T> entityClass, final Object id,
  final ReplicaMode mode) throws DocumentDoesNotExistException {
 return async().getFromReplica(entityClass, id, mode)
   .switchIfEmpty(notFound(entityClass, id))
   .toBlocking().single();
}

代码示例来源:origin: jooby-project/jooby

/**
 * Get an entity/document by ID. The unique ID is constructed via
 * {@link N1Q#qualifyId(Class, Object)}.
 *
 * If the entity is found, a entity is returned. Otherwise a
 * {@link DocumentDoesNotExistException}.
 *
 * @param entityClass Entity class.
 * @param id Entity id.
 * @param <T> Entity type.
 * @return An entity matching the id or an empty observable.
 */
default <T> T get(final Class<T> entityClass, final Object id)
  throws DocumentDoesNotExistException {
 return async().get(entityClass, id)
   .switchIfEmpty(notFound(entityClass, id))
   .toBlocking().single();
}

代码示例来源:origin: jooby-project/jooby

/**
 * Retrieve and touch an entity by its unique ID.
 *
 * If the entity is found, an entity is returned. Otherwise a
 * {@link DocumentDoesNotExistException}.
 *
 * This method works similar to {@link #get(Class, Object)}, but in addition it touches the
 * entity, which will reset its configured expiration time to the value provided.
 *
 * @param entityClass Entity class.
 * @param id id the unique ID of the entity.
 * @param expiry the new expiration time for the entity (in seconds).
 * @param <T> Entity type.
 * @return an {@link Observable} eventually containing the found {@link JsonDocument}.
 */
default <T> T getAndTouch(final Class<T> entityClass, final Object id, final int expiry)
  throws DocumentDoesNotExistException {
 return async().getAndTouch(entityClass, id, expiry)
   .switchIfEmpty(notFound(entityClass, id))
   .toBlocking().single();
}

代码示例来源:origin: jooby-project/jooby

/**
 * Retrieve and lock a entity by its unique ID.
 *
 * If the entity is found, a entity is returned. Otherwise a
 * {@link DocumentDoesNotExistException}.
 *
 * This method works similar to {@link #get(Class, Object)}, but in addition it (write) locks the
 * entity for the given lock time interval. Note that this lock time is hard capped to 30
 * seconds, even if provided with a higher value and is not configurable. The entity will unlock
 * afterwards automatically.
 *
 * Detecting an already locked entity is done by checking for
 * {@link TemporaryLockFailureException}. Note that this exception can also be raised in other
 * conditions, always when the error is transient and retrying may help.
 *
 * @param entityClass Entity class.
 * @param id id the unique ID of the entity.
 * @param lockTime the time to write lock the entity (max. 30 seconds).
 * @param <T> Entity type.
 * @return an {@link Observable} eventually containing the found {@link JsonDocument}.
 */
default <T> T getAndLock(final Class<T> entityClass, final Object id, final int lockTime)
  throws DocumentDoesNotExistException {
 return async().getAndLock(entityClass, id, lockTime)
   .switchIfEmpty(notFound(entityClass, id))
   .toBlocking().single();
}

代码示例来源:origin: ReactiveX/RxNetty

@Override
  public void call(Subscriber<? super PooledConnection<R, W>> subscriber) {
    final long startTimeNanos = Clock.newStartTimeNanos();
    if (limitDeterminationStrategy.acquireCreationPermit(startTimeNanos, NANOSECONDS)) {
      Observable<Connection<R, W>> newConnObsv = hostConnector.getConnectionProvider()
                                  .newConnectionRequest();
      newConnObsv.map(new Func1<Connection<R, W>, PooledConnection<R, W>>() {
        @Override
        public PooledConnection<R, W> call(Connection<R, W> connection) {
          return PooledConnection.create(PooledConnectionProviderImpl.this,
                          maxIdleTimeMillis, connection);
        }
      }).doOnError(new Action1<Throwable>() {
        @Override
        public void call(Throwable throwable) {
          limitDeterminationStrategy.releasePermit(); /*Before connect we acquired.*/
        }
      }).unsafeSubscribe(subscriber);
    } else {
      idleConnectionsHolder.poll()
                 .switchIfEmpty(Observable.<PooledConnection<R, W>>error(
                     new PoolExhaustedException("Client connection pool exhausted.")))
                 .unsafeSubscribe(subscriber);
    }
  }
});

代码示例来源:origin: ribot/ribot-app-android

private Observable<List<Venue>> getVenuesRecoveryObservable(Throwable error) {
  return mPreferencesHelper.getVenuesAsObservable()
      .switchIfEmpty(Observable.<List<Venue>>error(error));
}

代码示例来源:origin: ribot/ribot-app-android

public Observable<Encounter> performBeaconEncounter(String uuid, int major, int minor) {
  Observable<RegisteredBeacon> errorObservable = Observable.error(
      new BeaconNotRegisteredException(uuid, major, minor));
  return mDatabaseHelper.findRegisteredBeacon(uuid, major, minor)
      .switchIfEmpty(errorObservable)
      .concatMap(new Func1<RegisteredBeacon, Observable<Encounter>>() {
        @Override
        public Observable<Encounter> call(RegisteredBeacon registeredBeacon) {
          return performBeaconEncounter(registeredBeacon.id);
        }
      });
}

代码示例来源:origin: leeowenowen/rxjava-examples

@Override
 public void run() {
  Observable.<Integer>empty().switchIfEmpty(Observable.just(4, 5))
                .subscribe(new Action1<Integer>() {
                 @Override
                 public void call(Integer integer) {
                  log(integer);
                 }
                });
 }
}

代码示例来源:origin: hawkular/hawkular-metrics

@Override
  public Observable<Set<T>> call(Observable<T> metricIndexObservable) {
    return metricIndexObservable
        .toList()
        .switchIfEmpty(Observable.from(new HashSet<>()))
        .map((Func1<List<T>, HashSet<T>>) HashSet<T>::new);
  }
}

代码示例来源:origin: org.hawkular.metrics/hawkular-metrics-core-service

@Override
  public Observable<Set<T>> call(Observable<T> metricIndexObservable) {
    return metricIndexObservable
        .toList()
        .switchIfEmpty(Observable.from(new HashSet<>()))
        .map((Func1<List<T>, HashSet<T>>) HashSet<T>::new);
  }
}

代码示例来源:origin: org.hawkular.metrics/hawkular-metrics-core-service

@Override
public Observable<Tenant> getTenants() {
  return dataAccess.findAllTenantIds()
      .map(row -> row.getString(0))
      .distinct()
      .flatMap(id ->
              dataAccess.findTenant(id)
                  .map(Functions::getTenant)
                  .switchIfEmpty(Observable.just(new Tenant(id)))
      );
}

代码示例来源:origin: hawkular/hawkular-metrics

@Override
public Observable<Tenant> getTenants() {
  return dataAccess.findAllTenantIds()
      .map(row -> row.getString(0))
      .distinct()
      .flatMap(id ->
              dataAccess.findTenant(id)
                  .map(Functions::getTenant)
                  .switchIfEmpty(Observable.just(new Tenant(id)))
      );
}

代码示例来源:origin: hawkular/hawkular-metrics

@Override
  public Observable<Metric<T>> call(Observable<Metric<T>> metricObservable) {
    return metricObservable.flatMap(metric -> {
      long now = System.currentTimeMillis();
      MetricId<T> metricId = metric.getMetricId();
      return metricsService.findDataPoints(metricId, 0, now, 1, Order.ASC)
          .zipWith(metricsService.findDataPoints(metricId, 0, now, 1, Order.DESC), (p1, p2)
              -> new Metric<>(metric, p1.getTimestamp(), p2.getTimestamp()))
          .switchIfEmpty(Observable.just(metric));
    });
  }
}

代码示例来源:origin: spring-projects/spring-data-couchbase

@Override
public <T>Observable<T> findBySpatialView(SpatialViewQuery query, Class<T> entityClass) {
  return querySpatialView(query)
      .flatMap(spatialViewResult -> spatialViewResult.error()
          .flatMap(error -> Observable.error(new CouchbaseQueryExecutionException("Unable to execute spatial view query due to error:" + error.toString())))
          .switchIfEmpty(spatialViewResult.rows()))
      .map(row -> {
        AsyncSpatialViewRow asyncSpatialViewRow = (AsyncSpatialViewRow) row;
        return asyncSpatialViewRow.document(RawJsonDocument.class)
            .map(doc ->  mapToEntity(doc.id(), doc, entityClass))
            .toBlocking().single();
      })
      .doOnError(throwable -> Observable.error(new CouchbaseQueryExecutionException("Unable to execute spatial view query", throwable)));
}

代码示例来源:origin: org.hawkular.metrics/hawkular-metrics-core-service

@Override
  public Observable<Metric<T>> call(Observable<Metric<T>> metricObservable) {
    return metricObservable.flatMap(metric -> {
      long now = System.currentTimeMillis();
      MetricId<T> metricId = metric.getMetricId();
      return metricsService.findDataPoints(metricId, 0, now, 1, Order.ASC)
          .zipWith(metricsService.findDataPoints(metricId, 0, now, 1, Order.DESC), (p1, p2)
              -> new Metric<>(metric, p1.getTimestamp(), p2.getTimestamp()))
          .switchIfEmpty(Observable.just(metric));
    });
  }
}

代码示例来源:origin: spring-projects/spring-data-couchbase

@Override
public <T>Observable<T> findByN1QLProjection(N1qlQuery query, Class<T> entityClass) {
  return queryN1QL(query)
      .flatMap(asyncN1qlQueryResult -> asyncN1qlQueryResult.errors()
          .flatMap(error -> Observable.error(new CouchbaseQueryExecutionException("Unable to execute n1ql query due to error:" + error.toString())))
          .switchIfEmpty(asyncN1qlQueryResult.rows()))
      .map(row -> {
        JsonObject json = ((AsyncN1qlQueryRow)row).value();
        T decoded = translationService.decodeFragment(json.toString(), entityClass);
        return decoded;
      })
      .doOnError(throwable -> Observable.error(new CouchbaseQueryExecutionException("Unable to execute n1ql query", throwable)));
}

代码示例来源:origin: hawkular/hawkular-metrics

public Observable<ResultSet> updateStatusToFinished(Date timeSlice, UUID jobId) {
  // First check if the job exists
  return session.executeAndFetch(findByIdAndSlice.bind(timeSlice, jobId))
      .flatMap(jobRow -> session.execute(updateStatus.bind((byte) 1, timeSlice, jobId))
          .doOnError(t -> logger
              .warnf("There was an error updating the status to finished for %s in time " +
                  "slice [%s]", jobId, timeSlice.getTime()))
      )
      .switchIfEmpty(Observable.<ResultSet>empty().doOnCompleted(() -> logger.warnf(
          "Attempt to update the status of a non-exist job [%s] " +
              "in time slice [%s]", jobId, timeSlice.getTime())));
}

代码示例来源:origin: hawkular/hawkular-metrics

public <T> Observable.Transformer<MetricId<T>, Metric<T>> enrichToMetric() {
  return t -> t
      .flatMap(id -> dataAccess.findMetricInMetricsIndex(id)
          .compose(new MetricsIndexRowTransformer<>(id.getTenantId(), id.getType(), defaultTTL))
          .switchIfEmpty(dataAccess.findMetricInData(id) // This only verifies it exists..
              .compose(new MetricFromDataRowTransformer<>(id.getTenantId(), id.getType(), defaultTTL))));
}

代码示例来源:origin: org.hawkular.metrics/hawkular-metrics-core-service

public <T> Observable.Transformer<MetricId<T>, Metric<T>> enrichToMetric() {
  return t -> t
      .flatMap(id -> dataAccess.findMetricInMetricsIndex(id)
          .compose(new MetricsIndexRowTransformer<>(id.getTenantId(), id.getType(), defaultTTL))
          .switchIfEmpty(dataAccess.findMetricInData(id) // This only verifies it exists..
              .compose(new MetricFromDataRowTransformer<>(id.getTenantId(), id.getType(), defaultTTL))));
}

相关文章

Observable类方法