如何造个android流流式响应的轮子

  

点我啊,代码在这里
  

  


  

  

在代码代码中,我们经常碰到异步方法嵌套。比如提交文件之后在提交表,单提交数据根据是否成功然后做出其他逻辑处理.kotlin里面提出协程概念,利用语法糖来解决这个问题。在javaScript里面也有异步/等待来使异步用起来像同步。而在java中我暂时没有找到该特性,使得写起来异步嵌套感觉就是地狱,像吃了屎一样。利用这春节几天时间,尝试着按自己思路去解决这个问题,造个流式的轮子,于是写了流小框子。
  

  


  

  

从生活中思考代码,方法嵌套和水流的原理很相似,我们把每个异步当成一个水管,水从一个个管道流过,每个管道可以对水进行加工转换。转换的这个过程我们当成一个事件事件。在包装事件中,我们可以对它进行线程转换,事件转换,合并拆分等一系列转换。如果碰到异常,则直接终止这个流。
  

  

  

<强>简单使用
  

  

通过流静态创建方法创建一个流,然后串联下个流,如果不需要返回空白泛型.Event有两个泛型p, R,第一个是前个流流的返回值类型,第二个是当前流流返回类型.await exec方法是结束当前事件流,并将结果代入下个流。

  

<>强打印两句话

        流。新建(Event<无效,Void> () {   @Override   公共空运行(流流,避免无效,Await等待){   system . out。println(“这是第一个流”);   await.exec(空);   }      })。(新Event<无效,Void> () {   @Override   公共空运行(流流,避免无效,Await等待){   system . out。println(“这是两个流”);   await.exec(空);   }   }) .start ();      之前      

λ简化之后

        Flow.create ((NoneEvent)(流,等待)→{   system . out。println(“这是第一个流”);   await.exec ();   })((NoneEvent)(流,等待)→{   system . out。println(“这是两个流”);   await.exec ();   }) .start ();      之前      

两数相加

        Flow.create ((FirstEvent)(流,整数,等待)→   等待。exec(整数+ 5))   .resultThen((流,结果)→   system . out。println(“总”+结果))   .start ();   之前      

resultThen方法返回是当前流的结果,每个流后面使用resultThen都可以获取流的结果。如果遇到异常,可以通过流throwException方法抛出,可以在流后面catchThen立刻处理,也可以在最后流catchThen处理.finallyThen是事件流结束一个通知。
  

        Flow.create ((FirstEvent)(流、perVal等待)→{   如果(perVal==0) {   流。throwException(“股息不能为0 !”);   其他}{   await.exec (perVal/5);   }   })   .resultThen((流,结果)→   system . out。println(“总”+结果))   .catchThen((流,e)→   System.out.println (e.getMessage ()))   .finallyThen((流,等待)→   system . out。println(“这是流结束”)).start ();      

<>强切换线程
  

使用流   Flow.create ((FirstEvent)(流、perVal等待)→{   如果(perVal==0) {   流。throwException(“股息不能为0 !”);   其他}{   await.exec (perVal/5);   }   })   内(AndroidMain.get ())   .resultThen((流,结果)→   system . out。println(“总”+结果))   内(AndroidMain.get ())   .catchThen((流,e)→   System.out.println (e.getMessage ()))   内(SingleThread.get ())   .finallyThen((流,等待)→   system . out。println(“这是流结束”)).start ();   之前      

收集结果转换成多个流
  

        Flow.each ((FirstEvent,列表=new ArrayList<的在();   list.add (" 1 ");   list.add (“2”);   list.add (“3”);   await.exec(列表);   })((LastEvent之前      

多个流结果转换成一个流
  

     

如何造个android流流式响应的轮子