RxJavaing

Observable.just("123").lift(new Observable.Operator<Integer, String>() {
            @Override
            public Subscriber<? super String> call(final Subscriber<? super Integer> subscriber) {
                return new Subscriber<String>() {
                    @Override
                    public void onCompleted() {
                        System.out.println("s====================onCompleted======");
                    }

                    @Override
                    public void onError(Throwable throwable) {

                    }

                    @Override
                    public void onNext(String s) {
                        System.out.println("s=========================="+s);
                        subscriber.onNext(Integer.parseInt(s));
                    }

                    @Override
                    public void onStart() {
                        super.onStart();
                        System.out.println("s====================onStart======");
                    }
                };
            }
        }).subscribe();

怎么调用的啊?

Observable.just("123")? 它干了什么.分析源码

Observable observable = Observable.create(
	OnSubscribe  小a = new JustOnSubscribe("123");
); // 小A = observable
------------------------------------------->
Observable.just("123") 等效与 小A
------------------------------------------->
perator 小B = new Observable.Operator<Integer, String>() {
@Override  
 public Subscriber<? super String> call(final Subscriber<? super Integer> subscriber) 
  {          
    return 小C;    
  }
}
Subscriber 小C = new Subscriber<String>() {
@Override 
	public void onCompleted() {  
   		System.out.println("s====================onCompleted======");            
	}           
 	@Override
	public void onError(Throwable throwable) { 
  	}            
	@Override            
	public void onNext(String s) {                
		System.out.println("s=========================="+s);                
		subscriber.onNext(Integer.parseInt(s));  // subscriber 在小B call中传入 
		Subscriber action= new ActionSubscriber(onNext,onError,onCompleted);
		// subscriber 就是它---------------------------------------------->>>	          
	}            
		
			

	@Override           
	public void onStart() {                
		super.onStart();                
		System.out.println("s====================onStart======");            
	}        
}
==========================================================================
Observable.just("123").lift(小B).subscribe();
---------->小A.lift(小B).subscribe();
------------->
小A.lift(小B) = 大A
Observable 大A = Observable.create(
	OnSubscribe  大a = new OnSubscribeLift(小a,小B);
);
------------------------->大A.subscribe();
static <T> Subscription subscribe(Subscriber<? super T> subscriber, Observable<T> observable) {
            ((Subscriber)subscriber).onStart(); // 1
	    RxJavaHooks.onObservableStart(observable, observable.onSubscribe).call(subscriber); //2
            return RxJavaHooks.onObservableReturn((Subscription)subscriber); // 3
        }
    }
}

Subscriber action= new ActionSubscriber(onNext,onError,onCompleted);
// 1 --> action.start // 不关注,
subscribe方法会构造一个 内容观察者,暂时没用到它,不关注
RxJavaHooks.onObservableStart(observable, observable.onSubscribe).call(subscriber);
RxJavaHooks.onObservableStart(observable, observable.onSubscribe) = 
RxJavaHooks.onObservableStart(大A, 大a).call(action);
RxJavaHooks.onObservableStart(大A, 大a) = 大a
RxJavaHooks.onObservableStart(observable, observable.onSubscribe).call(subscriber);
翻译后是
--------->大a.call(action); // action 此时不用关注,
-----------> 大a = new OnSubscribeLift(小a,小B);
    OnSubscribeLift call 方法如下
this.operator = 小B
this.parent = 小a
public void call(Subscriber<? super R> o) {
        Subscriber e = (Subscriber)RxJavaHooks.onObservableLift(this.operator).call(o);
        e.onStart();
        this.parent.call(e);
}
------------------------>小C = 小B.call(action)
--------------------------->小C.onStart()----------------------------------------->OnStart调用
------------------------------>小a.call(小C);
OnSubscribe  小a = new JustOnSubscribe("123");
public void call(Subscriber<? super T> s) {
    s.setProducer(ScalarSynchronousObservable.createProducer(s, this.value));
    等效与
    小C.setProducer(WeakSingleProducer(小C,"123"));
}
public void setProducer(Producer p) {
    boolean passToSubscriber = false;
    long toRequest;
    synchronized(this) {
        toRequest = this.requested;
        this.producer = p;
        if(this.subscriber != null && toRequest == -9223372036854775808L) {
            passToSubscriber = true;
        }
    }

    if(passToSubscriber) {
        this.subscriber.setProducer(this.producer);
    } else if(toRequest == -9223372036854775808L) {
        this.producer.request(9223372036854775807L); // 会执行到它9223372036854775807L

    } else {
        this.producer.request(toRequest);
    }
}
---------------------------->
this.producer = WeakSingleProducer
------------------------------------------------->>request(9223372036854775807L);
static final class WeakSingleProducer<T> implements Producer {
    final Subscriber<? super T> actual;
    final T value;
    boolean once;

    public WeakSingleProducer(Subscriber<? super T> actual, T value) {
        this.actual = actual;
        this.value = value;
	等效与
	this.actual = 小C;
        this.value = "123";
} public void request(long n) { if(!this.once) { if(n < 0L) { throw new IllegalStateException("n >= required but it was " + n); } else if(n != 0L) { this.once = true; Subscriber a = this.actual; // a = 小C if(!a.isUnsubscribed()) { Object v = this.value; try { a.onNext(v); // onNext
			----------------------------------------->
			onNext调用

                    } catch (Throwable var6) {
                        Exceptions.throwOrReport(var6, a, v);
                        return;
                    }

                    if(!a.isUnsubscribed()) {
                        a.onCompleted(); // onCompleted
			----------------------------------------->
			onCompleted
调用

} } } } }}
最终 小ConStart onNext onCompleted 得以执行
Subscriber 小C = new Subscriber<String>() {
@Override 
	public void onCompleted() {  
   		System.out.println("s====================onCompleted======");            
	}           
 	@Override
	public void onError(Throwable throwable) { 
  	}            
	@Override            
	public void onNext(String s) {                
		System.out.println("s=========================="+s);                
		subscriber.onNext(Integer.parseInt(s));  // subscriber 在小B call中传入 
		Subscriber action= new ActionSubscriber(onNext,onError,onCompleted);
		// subscriber 就是它---------------------------------------------->>>	          
	}            
		
			

	@Override           
	public void onStart() {                
		super.onStart();                
		System.out.println("s====================onStart======");            
	}        
}










































































































































































































 


基于Python的天气预测和天气可视化项目(源码+文档说明)高分毕业设计,个人经导师指导并认可通过的高分设计项目,评审分99分,代码完整确保可以运行,小白也可以亲自搞定,主要针对计算机相关专业的正在做大作业的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业,代码资料完整,下载可用。 基于Python的天气预测和天气可视化项目(源码+文档说明)高分毕业设计基于Python的天气预测和天气可视化项目(源码+文档说明)高分毕业设计基于Python的天气预测和天气可视化项目(源码+文档说明)高分毕业设计基于Python的天气预测和天气可视化项目(源码+文档说明)高分毕业设计基于Python的天气预测和天气可视化项目(源码+文档说明)高分毕业设计基于Python的天气预测和天气可视化项目(源码+文档说明)高分毕业设计基于Python的天气预测和天气可视化项目(源码+文档说明)高分毕业设计基于Python的天气预测和天气可视化项目(源码+文档说明)高分毕业设计基于Python的天气预测和天气可视化项目(源码+文档说明)高分毕业设计基于Python的天气预测和天气可视化项目(源码+文档说明)高分毕业设计基于Python的天气预测和天气可视化项目(源码+文档说明)高分毕业设计基于Python的天气预测和天气可视化项目(源码+文档说明)高分毕业设计基于Python的天气预测和天气可视化项目(源码+文档说明)高分毕业设计基于Python的天气预测和天气可视化项目(源码+文档说明)高分毕业设计基于Python的天气预测和天气可视化项目(源码+文档说明)高分毕业设计基于Python的天气预测和天气可视化项目(源码+文档说明)高分毕业设计基于Python的天气预测和天气可视化项目(源码+文档说明)高分毕业设计基于Python的天气预测和天气可视化项目(源码+文档说明)高分毕业设
内容概要:本文深入探讨了在微网环境中,利用改进的二进制粒子群算法(IBPSO)解决含需求响应的机组组合问题。研究背景指出,随着能源结构的变化,微网系统日益重要,而需求响应(DR)的引入为提高微网运行效率提供了新思路。文中详细介绍了机组组合的基本模型及其扩展模型,后者将需求响应纳入考虑范围。接着,重点讲解了改进二进制粒子群算法的具体实现步骤,包括粒子位置和速度的更新规则。此外,还展示了基于MATLAB和CPLEX/Gurobi平台的仿真实验结果,验证了改进算法的有效性。最终,通过详细的代码注释和丰富的可视化工具,使得整个研究过程更加透明易懂。 适合人群:从事电力系统优化、微网管理及相关领域研究的专业人士和技术爱好者。 使用场景及目标:适用于需要优化微网系统运行效率的实际工程应用,特别是在处理大规模机组组合问题时,能够显著降低成本并提高系统稳定性。目标是帮助研究人员理解和掌握改进二进制粒子群算法的应用技巧,促进需求响应机制在电力系统中的广泛应用。 其他说明:本文不仅提供了完整的MATLAB代码实现,还包括详尽的理论推导和实验数据分析,有助于读者全面理解该课题的技术细节。同时,附带的可视化模块可以帮助用户更好地解读求解结果,便于进一步优化和调整参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值