学习日志

2017.5.4

2017.5.5

2017.5.11

2017.5.12

  • [x] 拉模式和推模式,命令式和响应式 – 响应式编程 [Android RxJava2](这到底是什么):第二部分
    • 观察者模式和回调方法有一个区别。在观察者模式中,每个订阅了的人都会通知,而回调方法中,只有一个最后订阅的回调会被通知。
  • [x] 函数式接口、默认方法、纯函数、函数的副作用、高阶函数、可变的和不可变的、函数式编程和 Lambda 表达式 - 响应式编程 [Android RxJava 2](这到底是什么)第三部分
    • 如果接口定义默认方法或者继承并重写 java.lang.Object 类里的任何方法。那个接口还是函数式接口,这是因为 java.lang.Object 方法并不算数。
    • 只要记住函数式接口的三点原则:只有一个抽象方法 - 可以有默认方法 - 可以使用 java.lang.Object 方法。如果任何接口满足这三点,那就一定是有效的函数式接口,反之则不是。
    • 拥有至少一个函数类型为参数的函数,或着返回一个函数的函数叫做高阶函数。
    • 函数式接口 - 有且仅有一个抽象方法的接口。
    • 默认方法 - 在 Java 8 里,我们可以在接口中定义有方法体的方法,这些叫默认方法。
    • 纯函数 - 一个函数的返回值仅由输入值决定,没有明显可见的副作用。
    • Lambda 表达式: “在计算机编程中,lambda 表达式,也叫匿名函数,是指一类无需定义标识符(函数名)的函数或子程序。”(Wiki)
    • 任何以函数式接口为参数的方法,我就可以写成 Lambda 表达式
  • [x] 大战 RxJava2 和 Java8 Stream [ Android RxJava2 ] (这到底是什么) 第四部分
    • 函数式接口(Functional Interfaces)、 接口默认方法(Default Methods)、高阶函数(Higher Order Functions)、函数的副作用(Side Effects in Functions)、纯函数(Pure Functions)、Lambda 表达式和函数式编程。

    • 函数式接口是只有一个抽象方法的接口。

    • 在 Java8 我们可以在接口中定义方法,这种方法叫做“默认方法”。

    • 至少有一个参数是函数的函数和返回类型为函数的函数称为高阶函数。

    • 纯函数的返回值仅仅由参数决定,不会产生可见的副作用(比如修改一些影响程序状态的值。——译注)。

    • Lambda 表达式在计算机编程中又叫做匿名函数,是一种在声明和执行的时候不会跟标识符绑定的函数或者子程序。

    • filter(过滤器): Stream 有一个只接受 Predicate 这个函数式接口的方法。我们可以在 Predicate 里写作用在数据上的逻辑代码。

    • map(映射):Stream 有一个只接受 Function 这个函数式接口的方法。我们可以在 Function 里写按照我们的要求转换数据的逻辑代码。

    • 如何把命令式代码转化成 RxJava2 Android 代码(重要)

    • 几个关于把命令式代码转换成响应式代码的技巧

      1. 如果代码中有循环的话,用 Observable 替换
      for (int i = 0; i < 10; i++) {
      
      }
      
      ==>
      
      Observable.range(0,10);
      
      1. 如果代码中有 if 语句的话,用 Rx 中的 filter 替换
      for (int i = 0; i < 10; i++) {
          if(i%2==0){
              Log.i("Android", "Even");
          }
      }
      
      ==>
      
      Observable.range(0,10)
              .filter(i->i%2==0)
              .subscribe(value->Log.i("Android","Event :"+value));
      
      1. 如果需要把一些数据转换为另一种格式,可以用 map 实现
      public class User {
          String username;
          boolean status;
      
          public User(String username, boolean status) {
              this.username = username;
              this.status = status;
          }
      }
      
      List<User> users = new ArrayList<>();
      users.add(new User("A",false));
      users.add(new User("B",true));
      users.add(new User("C",true));
      users.add(new User("D",false));
      users.add(new User("E",false));
      
      for (User user : users) {
          if(user.status){
              user.username = user.username+ "Online";
          }else {
              user.username = user.username+ "Offline";
          }
      }
      

      在 Rx 中,有很多方法实现上述代码。

      使用两个流:

      Observable.fromIterable(users)
              .filter(user -> user.status)
              .map(user -> user.username + " Online")
              .subscribe(user -> Log.i("Android", user.toString()));
      Observable.fromIterable(users)
              .filter(user -> !user.status)
              .map(user -> user.username + " Offline")
              .subscribe(user -> Log.i("Android", user.toString()));
      

      在 map 中使用 if else :

      Observable.fromIterable(users)
              .map(user -> {
                  if (user.status) {
                      user.username = user.username + " Online";
                  } else {
                      user.username = user.username + " Offline";
                  }
                  return user;
              })
              .subscribe(user -> Log.i("Android", user.toString()));
      
      1. 如果代码中有嵌套的循环:
      for (int i = 0; i < 10; i++) {
          for (int j = 0; j < 10; j++) {
              System.out.print("j ");
          }
          System.out.println("i");
      }
      
      ==>
      
      Observable.range(0, 10)
              .doAfterNext(i-> System.out.println("i"))
              .flatMap(integer -> Observable.range(0, 10))
              .doOnNext(i -> System.out.print("j "))
              .subscribe();
      
  • [x] 开发者(也就是我)与Rx Observable 类的对话 [ Android RxJava2 ] ( 这到底是什么?) 第五部分

2017.8.29

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容