<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # RxJava 教程 > 原文: [https://howtodoinjava.com/library/rxjava-tutorial/](https://howtodoinjava.com/library/rxjava-tutorial/) [RxJava 2.0](http://reactivex.io/) 是 Java 的開源擴展,用于 NetFlix 的異步編程。 如 [Java8 lambda 表達式](//howtodoinjava.com/java8/complete-lambda-expressions-tutorial-in-java/)中所示,它與函數式編程更加接近。 反應代碼的基本構建塊是*可觀察對象*和*訂閱者*。 `Observable`發出項目; `Subscriber`消耗這些項目。 RxJava 看起來也像[觀察者設計模式](https://howtodoinjava.com/design-patterns/behavioral/observer-design-pattern/),但有所不同 – 可觀察對象通常不會開始發布項目,除非有人明確訂閱它們。 ```java Table of Contents 1\. What is RxJava and Reactive Programming 2\. RxJava2 Dependency 3\. Transformation 4\. Conclusion ``` ## 1.什么是 RxJava 和反應式編程 **反應式編程**是一個通用的編程術語,著重于對諸如數據值或事件之類的變化做出反應。 回調是命令式完成反應式編程的一種方法。 例如,如果您有一個數據源(生產者)和一個數據目標(消費者); 然后,在將消費者連接到訂閱者之后,反應式編程框架負責將生產者生成的數據推送到消費者。 請注意,一個可觀察對象可以有任意數量的訂閱者。 讓我們看一個非常基本的 **RxJava helloworld 示例**。 ```java package com.howtodoinjava.app; import io.reactivex.Observable; import io.reactivex.functions.Consumer; public class RxJava2Example { public static void main(String[] args) { //producer Observable<String> observable = Observable.just("how", "to", "do", "in", "java"); //consumer Consumer<? super String> consumer = System.out::println; //Attaching producer to consumer observable.subscribe(consumer); } } ``` 在上面的示例中,`"how", "to", "do", "in", "java"`可被視為事件流。 為這些事件創建了`observable`。 然后,我們創建一個可以對這些單詞起作用的`consumer` - 在這種情況下,它只是將它們打印出來以供控制臺使用。 該消費者不過是`subscriber`。 最后,我們使用`subscribe()`將訂閱者連接到消費者。 一旦我們將兩者連接起來,單詞/事件就開始流動,訂閱者開始在控制臺中打印它們。 在代碼內部,當從可觀察對象發出新單詞時,將在每個訂閱者上調用`onNext()`方法。 當可觀察的單詞成功完成或出現錯誤時,將在訂閱者上調用`onComplete()`或`onError()`方法。 ## 2\. RxJava2 依賴項 要將 RxJava 2.0 包含到項目運行時中,可以在給定的 maven 配置,gradle 配置或 jar 文件添加到類路徑中進行選擇。 #### 2.1 RxJava 2.0 Maven 依賴關系 ```java <!-- https://mvnrepository.com/artifact/io.reactivex.rxjava2/rxjava --> <dependency> <groupId>io.reactivex.rxjava2</groupId> <artifactId>rxjava</artifactId> <version>2.1.0</version> </dependency> ``` #### 2.2 RxJava 2.0 Gradle 依賴關系 ```java compile group: 'io.reactivex.rxjava2', name: 'rxjava', version: '2.1.0' ``` #### 2.3 RxJava 2.0 Jar 依賴關系 [下載 RxJava 2.0 Jar 文件鏈接](http://central.maven.org/maven2/io/reactivex/rxjava2/rxjava/2.1.0/rxjava-2.1.0.jar)。 ## 3\. RxJava 中的轉換 在 RxJava 中,訂閱者從可觀察到的事件類型與訂閱者發出的事件類型不需要相同。 它們可以包含的數據,數據類型或接收到的事件和發出的事件之間的任何其他主要差異是不同的。 這是為源和目標之間的事件的中間*轉換*提供支持的必要條件,以便兩者都能按其設計的方式工作并且仍然兼容。 與[適配器設計模式](//howtodoinjava.com/2014/05/10/adapter-design-pattern-in-java/)非常相似。 讓我們舉個例子。 在我們的 helloworld 示例中,我們要以大寫形式打印單詞。 這是一個簡單的轉換,但是您會明白的。 ```java Observable<String> observable = Observable.just("how", "to", "do", "in", "java"); Consumer<? super String> consumer = System.out::println; //Transformation using map() method observable.map(w -> w.toUpperCase()).subscribe(consumer); ``` 在上面的示例中,我們在訂閱可觀察對象之前添加了一種中間方法`map()`。 因此,每個單詞都首先通過`map()`方法,然后再傳遞給訂閱者以進行進一步處理。 這稱為轉換。 如前所述,您還可以在轉換過程中更改事件的數據類型。 例如: ```java Observable<String> observable = Observable.just("how", "to", "do", "in", "java"); Consumer<? super Integer> consumer = System.out::println; observable.map(w -> w.toUpperCase().hashCode()).subscribe(consumer); ``` 在此程序中,我們遍歷單詞,然后在轉換中獲得單詞的哈希碼并將其傳遞給訂閱者,后者在控制臺中打印該哈希碼。 因此,在這里,我們將連接可觀察對象(它發出字符串)和訂閱者(它接受整數)。 ## 4\. 結論 可觀察的方式和訂閱者之間的松散連接,為開發人員帶來了很大的優勢。 他們不需要考慮整個并發示例,對于我們許多人來說,這已經是艱巨的任務。 您只需連接制作人和訂閱者 - 一切都將完美無缺地進行。 另外,您無需同時考慮可觀察者和訂閱者。 您可以使用最佳設計選擇獨立地開發它們,然后使用轉換概念將它們連接起來。 太好了! 該 **RxJava 教程**是 RxJava 的**簡介**。 我將在即將到來的 **rxjava 初學者教程**中更深入地介紹與**反應式編程教程**相關的重要概念。 學習愉快!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看