es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo obtener datos de un Flowable a otro Flowable?

Tengo 2 Flowables (uno de los cuales me está proporcionando elementos de VelocityNed y otro que he escrito para consumir elementos del primero); el problema es que no sé cómo hacer el segundo correcto, ya que todavía no me siento seguro con RxJava.

Mi código de Flowable:

private Flowable<float> getIAS(Flowable<velocityned> velocityNed) {
        Flowable<float> flowable = Flowable.create(emitter->{
            velocityNed.subscribeWith(new DisposableSubscriber<velocityned>() {
                @Override public void onNext(VelocityNed v) {
                    float valueToEmit = (float)Math.sqrt(Math.pow(v.getDownMS(),2)+Math.pow(v.getEastMS(),2)+Math.pow(v.getNorthMS(),2));
                    // cómo emitir esto
                }
                @Override public void onError(Throwable t) {
                    t.printStackTrace();
                }
                @Override public void onComplete() {
                    emitter.onComplete();
                    this.dispose();
                }
            });
        }, BackpressureStrategy.BUFFER);
        return flowable;
    }

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para crear el segundo Flowable, puedes usar el operador map para transformar los objetos VelocityNed emitidos por el primer Flowable en valores Float. Así es cómo puedes modificar tu función getIAS:

    private Flowable<float> getIAS(Flowable<velocityned> velocityNed) {
        return velocityNed
            .map(v ->
                (float) Math.sqrt(
                    Math.pow(v.getDownMS(), 2) +
                    Math.pow(v.getEastMS(), 2) +
                    Math.pow(v.getNorthMS(), 2)
                )
            );
    }
    

    Esto creará un nuevo Flowable que emite los valores Float calculados en tu método onNext. Luego puedes suscribirte a este nuevo Flowable para consumir los valores.

    Ten en cuenta que no es necesario usar Flowable.create para crear el nuevo Flowable, ya que simplemente puedes aplicar el operador map al Flowable existente.

Comments are closed.