From b3e30d2654cd1c1865e2da60819acf15b284d372 Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Mon, 1 Oct 2018 17:48:40 +0300 Subject: [PATCH 01/34] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c63b99e..e3ea29e 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Для следования этой обучающей программе от вас не потребуются знания реактивного или функционального программирования, однако, предполагается наличие базовых знаний Java. -[Начать изучение](/Part 1 - Getting Started/1. Why Rx.md) +[Начать изучение](Part 1 - Getting Started/1. Why Rx.md) ### Структура From e5e6938161db822003d03f1f66bff805ed5e4b35 Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Mon, 1 Oct 2018 17:50:58 +0300 Subject: [PATCH 02/34] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e3ea29e..ee3396f 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Для следования этой обучающей программе от вас не потребуются знания реактивного или функционального программирования, однако, предполагается наличие базовых знаний Java. -[Начать изучение](Part 1 - Getting Started/1. Why Rx.md) +[Начать изучение](/Part%201%20-%20Getting%20Started/1.%20Why%20Rx.md) ### Структура From 6c4adc747348a21ce8cffb2af97727fa7ca92116 Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Mon, 1 Oct 2018 17:51:41 +0300 Subject: [PATCH 03/34] Update 1. Why Rx.md --- Part 1 - Getting Started/1. Why Rx.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Part 1 - Getting Started/1. Why Rx.md b/Part 1 - Getting Started/1. Why Rx.md index 172298b..a13ec5b 100644 --- a/Part 1 - Getting Started/1. Why Rx.md +++ b/Part 1 - Getting Started/1. Why Rx.md @@ -45,5 +45,5 @@ Rx применяется для составления и обработки п | Назад | Вперед | | --- | --- | -| | [Ключевые типы](/Part 1 - Getting Started/2. Key types.md) | +| | [Ключевые типы](/Part%201%20-%20Getting%20Started/2.%20Key%20types.md) | From 2120587e44d0f6d6540acfb6fa15d9689931fc58 Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Mon, 1 Oct 2018 17:52:28 +0300 Subject: [PATCH 04/34] Update 2. Key types.md --- Part 1 - Getting Started/2. Key types.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Part 1 - Getting Started/2. Key types.md b/Part 1 - Getting Started/2. Key types.md index d93424b..b581faa 100644 --- a/Part 1 - Getting Started/2. Key types.md +++ b/Part 1 - Getting Started/2. Key types.md @@ -212,4 +212,4 @@ s.onNext(2); | Назад | Вперед | | --- | --- | -| [Почему Rx](/Part 1 - Getting Started/1. Why Rx.md) | [Жизненный цикл подписки](/Part 1 - Getting Started/3. Lifetime management.md) | +| [Почему Rx](/Part%201%20-%20Getting%20Started/1.%20Why%20Rx.md) | [Жизненный цикл подписки](/Part%201%20-%20Getting%20Started/3.%20Lifetime%20management.md) | From 73936299f6ca0df082b24241b98a4966754c6c80 Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Mon, 1 Oct 2018 17:53:52 +0300 Subject: [PATCH 05/34] Update 3. Lifetime management.md --- Part 1 - Getting Started/3. Lifetime management.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Part 1 - Getting Started/3. Lifetime management.md b/Part 1 - Getting Started/3. Lifetime management.md index c9c03dd..2d1c4fe 100644 --- a/Part 1 - Getting Started/3. Lifetime management.md +++ b/Part 1 - Getting Started/3. Lifetime management.md @@ -151,4 +151,4 @@ We will see more of them later in this book. It is interesting to note that `Sub | Previous | Next | | --- | --- | -| [Key types](/Part 1 - Getting Started/2. Key types.md) | [Chapter 2](/Part 2 - Sequence Basics/1. Creating a sequence.md) | +| [Key types](/Part%201%20-%20Getting%20Started/2.%20Key%20types.md) | [Chapter 2](/Part%202%20-%20Sequence%20Basics/1.%20Creating%20a%20sequence.md) | From 8ae0b4ca5bd7ebd5efc84239f5cfa64b302a5ce5 Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Mon, 1 Oct 2018 17:54:53 +0300 Subject: [PATCH 06/34] Update 1. Creating a sequence.md --- Part 2 - Sequence Basics/1. Creating a sequence.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Part 2 - Sequence Basics/1. Creating a sequence.md b/Part 2 - Sequence Basics/1. Creating a sequence.md index 376edb8..a83b8b1 100644 --- a/Part 2 - Sequence Basics/1. Creating a sequence.md +++ b/Part 2 - Sequence Basics/1. Creating a sequence.md @@ -302,4 +302,4 @@ Completed | Назад | Вперед | | --- | --- | -| [Жизненный цикл подписки](/Part 1 - Getting Started/3. Lifetime management.md) | [Фильтрация последовательности](/Part 2 - Sequence Basics/2. Reducing a sequence.md) | +| [Жизненный цикл подписки](/Part%201%20-%20Getting%20Started/3.%20Lifetime%20management.md) | [Фильтрация последовательности](/Part%202%20-%20Sequence%20Basics/2.%20Reducing%20a%20sequence.md) | From e4490323563b4a423b8048af5b1e1c848736fa25 Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Mon, 1 Oct 2018 17:55:58 +0300 Subject: [PATCH 07/34] Update 2. Reducing a sequence.md --- Part 2 - Sequence Basics/2. Reducing a sequence.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Part 2 - Sequence Basics/2. Reducing a sequence.md b/Part 2 - Sequence Basics/2. Reducing a sequence.md index c5c824c..88eecc0 100644 --- a/Part 2 - Sequence Basics/2. Reducing a sequence.md +++ b/Part 2 - Sequence Basics/2. Reducing a sequence.md @@ -439,4 +439,4 @@ Subscription subscription = values | Назад | Вперед | | --- | --- | -| [Создание последовательности](/Part 2 - Sequence Basics/1. Creating a sequence.md) | [Исследование последовательности](/Part 2 - Sequence Basics/3. Inspection.md) | +| [Создание последовательности](/Part%202%20-%20Sequence%20Basics/1.%20Creating%20a%20sequence.md) | [Исследование последовательности](/Part%202%20-%20Sequence%20Basics/3.%20Inspection.md) | From 45976b963300c285cf31af91707c90c5ec5d122c Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Mon, 1 Oct 2018 17:57:17 +0300 Subject: [PATCH 08/34] Update 3. Inspection.md --- Part 2 - Sequence Basics/3. Inspection.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Part 2 - Sequence Basics/3. Inspection.md b/Part 2 - Sequence Basics/3. Inspection.md index c0ae5ca..97c7b57 100644 --- a/Part 2 - Sequence Basics/3. Inspection.md +++ b/Part 2 - Sequence Basics/3. Inspection.md @@ -338,4 +338,4 @@ Error: java.lang.Exception | Назад | Вперед | | --- | --- | -| [Фильтрация последовательности](/Part 2 - Sequence Basics/2. Reducing a sequence.md) | [Агрегация](/Part 2 - Sequence Basics/4. Aggregation.md) | +| [Фильтрация последовательности](/Part%202%20-%20Sequence%20Basics/2.%20Reducing%20a%20sequence.md) | [Агрегация](/Part%202%20-%20Sequence%20Basics/4.%20Aggregation.md) | From 24d56d1426b2a300508ebf061300f53d196302c9 Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Mon, 1 Oct 2018 17:58:15 +0300 Subject: [PATCH 09/34] Update 4. Aggregation.md --- Part 2 - Sequence Basics/4. Aggregation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Part 2 - Sequence Basics/4. Aggregation.md b/Part 2 - Sequence Basics/4. Aggregation.md index 7687cfc..5ae9e0b 100644 --- a/Part 2 - Sequence Basics/4. Aggregation.md +++ b/Part 2 - Sequence Basics/4. Aggregation.md @@ -567,4 +567,4 @@ Nesting observables to consume them doesn't make much sense. Towards the end of | Previous | Next | | --- | --- | -| [Inspection](/Part 2 - Sequence Basics/3. Inspection.md) | [Transformation of sequences](/Part 2 - Sequence Basics/5. Transformation of sequences.md) | +| [Inspection](/Part%202%20-%20Sequence%20Basics/3.%20Inspection.md) | [Transformation of sequences](/Part%202%20-%20Sequence%20Basics/5.%20Transformation%20of%20sequences.md) | From f2e340d090d4eaa675256f0a1d5117839545b8ea Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Mon, 1 Oct 2018 17:59:22 +0300 Subject: [PATCH 10/34] Update 5. Transformation of sequences.md --- Part 2 - Sequence Basics/5. Transformation of sequences.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Part 2 - Sequence Basics/5. Transformation of sequences.md b/Part 2 - Sequence Basics/5. Transformation of sequences.md index 82deddf..4834f66 100644 --- a/Part 2 - Sequence Basics/5. Transformation of sequences.md +++ b/Part 2 - Sequence Basics/5. Transformation of sequences.md @@ -487,4 +487,4 @@ Observable.range(1, 3) | Previous | Next | | --- | --- | -| [Aggregation](/Part 2 - Sequence Basics/4. Aggregation.md) | [Chapter 3 - Taming the sequence](/Part 3 - Taming the sequence/1. Side effects.md) | +| [Aggregation](/Part%202%20-%20Sequence%20Basics/4.%20Aggregation.md) | [Chapter 3 - Taming the sequence](/Part%203%20-%20Taming%20the%20sequence/1.%20Side%20effects.md) | From 605dcf6d11da2721568a98cd5ad811ae5ddfac75 Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Thu, 4 Oct 2018 08:38:10 +0300 Subject: [PATCH 11/34] Update 1. Side effects.md --- Part 3 - Taming the sequence/1. Side effects.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Part 3 - Taming the sequence/1. Side effects.md b/Part 3 - Taming the sequence/1. Side effects.md index 81be09f..28eb3d7 100644 --- a/Part 3 - Taming the sequence/1. Side effects.md +++ b/Part 3 - Taming the sequence/1. Side effects.md @@ -329,4 +329,4 @@ The first subscriber is the first to be called for each item. Its action is to m | Previous | Next | | --- | --- | -| [Transformation of sequences](/Part 2 - Sequence Basics/5. Transformation of sequences.md) | [Leaving the monad](/Part 3 - Taming the sequence/2. Leaving the monad.md) | +| [Transformation of sequences](/Part%202%20-%20Sequence%20Basics/5.%20Transformation%20of%20sequences.md) | [Leaving the monad](/Part%203%20-%20Taming%20the%20sequence/2.%20Leaving%20the%20monad.md) | From ce853bd60066774ca300e477588b2fde9390cc62 Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Thu, 4 Oct 2018 08:39:07 +0300 Subject: [PATCH 12/34] Update 2. Leaving the monad.md --- Part 3 - Taming the sequence/2. Leaving the monad.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Part 3 - Taming the sequence/2. Leaving the monad.md b/Part 3 - Taming the sequence/2. Leaving the monad.md index ff12ac9..3329779 100644 --- a/Part 3 - Taming the sequence/2. Leaving the monad.md +++ b/Part 3 - Taming the sequence/2. Leaving the monad.md @@ -325,4 +325,4 @@ Some blocking ways to access observables, such as `last()`, require the observab | Previous | Next | | --- | --- | -| [Side effects](/Part 3 - Taming the sequence/1. Side effects.md) | [Advanced error handling](/Part 3 - Taming the sequence/3. Advanced error handling.md) | +| [Side effects](/Part%203%20-%20Taming%20the%20sequence/1.%20Side%20effects.md) | [Advanced error handling](/Part%203%20-%20Taming%20the%20sequence/3.%20Advanced%20error%20handling.md) | From 45755dccd8f28fe49cb0a8871e6f7f0e97aa46c7 Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Thu, 4 Oct 2018 08:39:50 +0300 Subject: [PATCH 13/34] Update 3. Advanced error handling.md --- Part 3 - Taming the sequence/3. Advanced error handling.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Part 3 - Taming the sequence/3. Advanced error handling.md b/Part 3 - Taming the sequence/3. Advanced error handling.md index 2fc76f4..db1dfd4 100644 --- a/Part 3 - Taming the sequence/3. Advanced error handling.md +++ b/Part 3 - Taming the sequence/3. Advanced error handling.md @@ -234,4 +234,4 @@ It is important to note here that we are responsible for terminating the observa | Previous | Next | | --- | --- | -| [Leaving the monad](/Part 3 - Taming the sequence/2. Leaving the monad.md) | [Combining sequences](/Part 3 - Taming the sequence/4. Combining sequences.md) | +| [Leaving the monad](/Part%203%20-%20Taming%20the%20sequence/2.%20Leaving%20the%20monad.md) | [Combining sequences](/Part%203%20-%20Taming%20the%20sequence/4.%20Combining%20sequences.md) | From cccd6e859548737d95781277e7ccd940e8250c68 Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Fri, 5 Oct 2018 15:19:08 +0300 Subject: [PATCH 14/34] Update 2. Leaving the monad.md --- Part 3 - Taming the sequence/2. Leaving the monad.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Part 3 - Taming the sequence/2. Leaving the monad.md b/Part 3 - Taming the sequence/2. Leaving the monad.md index 3329779..6c7150d 100644 --- a/Part 3 - Taming the sequence/2. Leaving the monad.md +++ b/Part 3 - Taming the sequence/2. Leaving the monad.md @@ -1,6 +1,6 @@ # Leaving the monad -A [monad] (https://en.wikipedia.org/wiki/Monad_%28functional_programming%29) is an abstract concept from functional programming that is unfamiliar to most programmers. It is beyond the scope of this guide teaching monads. In www.introtorx.com we find a short definition: +A [monad](https://en.wikipedia.org/wiki/Monad_%28functional_programming%29) is an abstract concept from functional programming that is unfamiliar to most programmers. It is beyond the scope of this guide teaching monads. In www.introtorx.com we find a short definition: > Monads are a kind of abstract data type constructor that encapsulate program logic instead of data in the domain model. Monads are of interest to us, because the observable is a monad. Rx code declares what needs to be done but the actual processing happens not when Rx statements are executed, but rather when values are emitted. Readers may find it interesting to read more about monads in general. For this guide, when refering to monads the reader only needs to think about the observable. From 01874ddd4e28f3c5ea15a8c5addfbf088c22e48c Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Fri, 5 Oct 2018 15:20:39 +0300 Subject: [PATCH 15/34] Update 4. Combining sequences.md --- Part 3 - Taming the sequence/4. Combining sequences.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Part 3 - Taming the sequence/4. Combining sequences.md b/Part 3 - Taming the sequence/4. Combining sequences.md index fa3ea6d..73e08cd 100644 --- a/Part 3 - Taming the sequence/4. Combining sequences.md +++ b/Part 3 - Taming the sequence/4. Combining sequences.md @@ -673,4 +673,4 @@ I like to think of `combineLatest` as one event occuring in the context of anoth | Previous | Next | | --- | --- | -| [Advanced error handling](/Part 3 - Taming the sequence/3. Advanced error handling.md) | [Time-shifted sequences](/Part 3 - Taming the sequence/5. Time-shifted sequences.md) | +| [Advanced error handling](/Part%203%20-%20Taming%20the%20sequence/3.%20Advanced%20error%20handling.md) | [Time-shifted sequences](/Part%203%20-%20Taming%20the%20sequence/5.%20Time-shifted%20sequences.md) | From 0295b6ca1bccb4f611dd8d3742294f9c4ea87d06 Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Fri, 5 Oct 2018 15:21:40 +0300 Subject: [PATCH 16/34] Update 5. Time-shifted sequences.md --- Part 3 - Taming the sequence/5. Time-shifted sequences.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Part 3 - Taming the sequence/5. Time-shifted sequences.md b/Part 3 - Taming the sequence/5. Time-shifted sequences.md index abb50bc..c7ee3cd 100644 --- a/Part 3 - Taming the sequence/5. Time-shifted sequences.md +++ b/Part 3 - Taming the sequence/5. Time-shifted sequences.md @@ -603,4 +603,4 @@ The output is the same as the previous two examples | Previous | Next | | --- | --- | -| [Combining sequences](/Part 3 - Taming the sequence/4. Combining sequences.md) | [Hot and cold observables](/Part 3 - Taming the sequence/6. Hot and Cold observables.md) | +| [Combining sequences](/Part%203%20-%20Taming%20the%20sequence/4.%20Combining%20sequences.md) | [Hot and cold observables](/Part%203%20-%20Taming%20the%20sequence/6.%20Hot%20and%20Cold%20observables.md) | From 4d0c0b6ffa5303fd106f67cc7c114635dafa175b Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Fri, 5 Oct 2018 15:22:32 +0300 Subject: [PATCH 17/34] Update 6. Hot and Cold observables.md --- Part 3 - Taming the sequence/6. Hot and Cold observables.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Part 3 - Taming the sequence/6. Hot and Cold observables.md b/Part 3 - Taming the sequence/6. Hot and Cold observables.md index 0800734..f4bd468 100644 --- a/Part 3 - Taming the sequence/6. Hot and Cold observables.md +++ b/Part 3 - Taming the sequence/6. Hot and Cold observables.md @@ -364,4 +364,4 @@ The `share` method is an alias for `Observable.publish().refCount()`. It allows | Previous | Next | | --- | --- | -| [Time-shifted sequences](/Part 3 - Taming the sequence/5. Time-shifted sequences.md) | [Custom operators](/Part 3 - Taming the sequence/7. Custom operators.md) | +| [Time-shifted sequences](/Part%203%20-%20Taming%20the%20sequence/5.%20Time-shifted%20sequences.md) | [Custom operators](/Part%203%20-%20Taming%20the%20sequence/7.%20Custom%20operators.md) | From 576cc50fa22aba5af4cbb9d8e76f8b2ed1207cf8 Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Fri, 5 Oct 2018 15:23:31 +0300 Subject: [PATCH 18/34] Update 7. Custom operators.md --- Part 3 - Taming the sequence/7. Custom operators.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Part 3 - Taming the sequence/7. Custom operators.md b/Part 3 - Taming the sequence/7. Custom operators.md index 30f3f2e..c23103f 100644 --- a/Part 3 - Taming the sequence/7. Custom operators.md +++ b/Part 3 - Taming the sequence/7. Custom operators.md @@ -404,4 +404,4 @@ Theoretically, any operator can be implemented as both `Observable.Operator` and | Previous | Next | | --- | --- | -| [Hot and cold observables](/Part 3 - Taming the sequence/6. Hot and Cold observables.md) | [Chapter 4 - Concurrency](/Part 4 - Concurrency/1. Scheduling and threading.md) | +| [Hot and cold observables](/Part%203%20-%20Taming%20the%20sequence/6.%20Hot%20and%20Cold%20observables.md) | [Chapter 4 - Concurrency](/Part%204%20-%20Concurrency/1.%20Scheduling%20and%20threading.md) | From 09426bf7322aa7d4a0109db7f46a2b63a8016c59 Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Fri, 5 Oct 2018 15:24:25 +0300 Subject: [PATCH 19/34] Update 1. Scheduling and threading.md --- Part 4 - Concurrency/1. Scheduling and threading.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Part 4 - Concurrency/1. Scheduling and threading.md b/Part 4 - Concurrency/1. Scheduling and threading.md index 5023ba1..dad0759 100644 --- a/Part 4 - Concurrency/1. Scheduling and threading.md +++ b/Part 4 - Concurrency/1. Scheduling and threading.md @@ -392,4 +392,4 @@ Again on 11 | Previous | Next | | --- | --- | -| [Custom operators](/Part 3 - Taming the sequence/7. Custom operators.md) | [Testing Rx](/Part 4 - Concurrency/2. Testing Rx.md) | +| [Custom operators](/Part%203%20-%20Taming%20the%20sequence/7.%20Custom%20operators.md) | [Testing Rx](/Part%204%20-%20Concurrency/2.%20Testing%20Rx.md) | From 89c6f7108717b43579b5fbdfe1ef57f002bc7593 Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Fri, 5 Oct 2018 15:25:13 +0300 Subject: [PATCH 20/34] Update 2. Testing Rx.md --- Part 4 - Concurrency/2. Testing Rx.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Part 4 - Concurrency/2. Testing Rx.md b/Part 4 - Concurrency/2. Testing Rx.md index a3530c5..a892158 100644 --- a/Part 4 - Concurrency/2. Testing Rx.md +++ b/Part 4 - Concurrency/2. Testing Rx.md @@ -227,4 +227,4 @@ Awaiting with a timeout will cause an exception if the observable fails to compl | Previous | Next | | --- | --- | -| [Scheduling and threading](/Part 4 - Concurrency/1. Scheduling and threading.md) | [Sequences of coincidence](/Part 4 - Concurrency/3. Sequences of coincidence.md) | +| [Scheduling and threading](/Part%204%20-%20Concurrency/1.%20Scheduling%20and%20threading.md) | [Sequences of coincidence](/Part%204%20-%20Concurrency/3.%20Sequences%20of%20coincidence.md) | From a178c238ac164008baf9ef26f3a995ac24f34b65 Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Fri, 5 Oct 2018 15:26:01 +0300 Subject: [PATCH 21/34] Update 3. Sequences of coincidence.md --- Part 4 - Concurrency/3. Sequences of coincidence.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Part 4 - Concurrency/3. Sequences of coincidence.md b/Part 4 - Concurrency/3. Sequences of coincidence.md index c04bcda..9971b76 100644 --- a/Part 4 - Concurrency/3. Sequences of coincidence.md +++ b/Part 4 - Concurrency/3. Sequences of coincidence.md @@ -293,4 +293,4 @@ You can also implement `groupJoin` with `join` and `groupBy`. Doing so would req | Previous | Next | | --- | --- | -| [Testing Rx](/Part 4 - Concurrency/2. Testing Rx.md) | [Backpressure](/Part 4 - Concurrency/4. Backpressure.md) | +| [Testing Rx](/Part%204%20-%20Concurrency/2.%20Testing%20Rx.md) | [Backpressure](/Part%204%20-%20Concurrency/4.%20Backpressure.md) | From d7c8a891f8dacbde9ef762f7575267b94a430b53 Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Fri, 5 Oct 2018 15:26:33 +0300 Subject: [PATCH 22/34] Update 4. Backpressure.md --- Part 4 - Concurrency/4. Backpressure.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Part 4 - Concurrency/4. Backpressure.md b/Part 4 - Concurrency/4. Backpressure.md index f239ff7..73bb349 100644 --- a/Part 4 - Concurrency/4. Backpressure.md +++ b/Part 4 - Concurrency/4. Backpressure.md @@ -353,4 +353,4 @@ What we see here is that the first 128 items where consumed normally, but then w | Previous | Next | | --- | --- | -| [Sequences of coincidence](/Part 4 - Concurrency/3. Sequences of coincidence.md) | | +| [Sequences of coincidence](/Part%204%20-%20Concurrency/3.%20Sequences%20of%20coincidence.md) | | From f598a7c6cc8d4dae7a0b4c7d8497bdd4bc7e943f Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Fri, 5 Oct 2018 15:51:24 +0300 Subject: [PATCH 23/34] Update 2. Key types.md --- Part 1 - Getting Started/2. Key types.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Part 1 - Getting Started/2. Key types.md b/Part 1 - Getting Started/2. Key types.md index b581faa..cc59973 100644 --- a/Part 1 - Getting Started/2. Key types.md +++ b/Part 1 - Getting Started/2. Key types.md @@ -212,4 +212,4 @@ s.onNext(2); | Назад | Вперед | | --- | --- | -| [Почему Rx](/Part%201%20-%20Getting%20Started/1.%20Why%20Rx.md) | [Жизненный цикл подписки](/Part%201%20-%20Getting%20Started/3.%20Lifetime%20management.md) | +| [Почему Rx]() | [Жизненный цикл подписки]() | From d77711a5eb8983855f1d72cd040a6b1639f63220 Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Fri, 5 Oct 2018 16:31:05 +0300 Subject: [PATCH 24/34] Links update --- Part 1 - Getting Started/2. Key types.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Part 1 - Getting Started/2. Key types.md b/Part 1 - Getting Started/2. Key types.md index cc59973..b0249c6 100644 --- a/Part 1 - Getting Started/2. Key types.md +++ b/Part 1 - Getting Started/2. Key types.md @@ -1,7 +1,7 @@

Ключевые типы

Rx базируется на двух фундаментальных типах, в то время, как некоторые другие расширяют их функциональность. Этими базовыми типами являются Observable и Observer, которые мы и рассмотрим в этом разделе. Мы также рассмотрим Subject’ы – они помогут в понимании основных концепций Rx. -Rx построена на паттерне Observer. В этом нет ничего нового, обработчики событий уже существуют в Java (например, JavaFX EventHandler[1]), однако они проигрывают в сравнении с Rx по следующим причинам: +Rx построена на паттерне Observer. В этом нет ничего нового, обработчики событий уже существуют в Java (например, JavaFX EventHandler[[1](#notes)], однако они проигрывают в сравнении с Rx по следующим причинам:
  • Обработку событий в них сложно компоновать
  • Их вызов нельзя отложить
  • @@ -10,17 +10,17 @@ Rx построена на паттерне Observable – первый базовый тип, который мы рассмотрим. Этот класс содержит в себе основную часть реализации Rx, включая все базовые операторы. Мы рассмотрим их позже, а пока нам следует понять принцип работы метода subscribe. Вот ключевая перегрузка [2]: +Observable – первый базовый тип, который мы рассмотрим. Этот класс содержит в себе основную часть реализации Rx, включая все базовые операторы. Мы рассмотрим их позже, а пока нам следует понять принцип работы метода subscribe. Вот ключевая перегрузка [[2](#notes)]: ```JAVA public final Subscription subscribe(Observer observer) ``` -Метод subscribe используется для получения данных выдаваемых [3] observable. Эти данные передаются наблюдателю, который предполагает их обработку в зависимости от требований потребителя. Наблюдатель в этом случае является реализацией интерфейса Observer. +Метод subscribe используется для получения данных выдаваемых [[3](#notes)] observable. Эти данные передаются наблюдателю, который предполагает их обработку в зависимости от требований потребителя. Наблюдатель в этом случае является реализацией интерфейса Observer. Observable сообщает три вида событий:
    • Данные
    • -
    • Сигнал о завершении последовательности [4] (что означает, что новых данных больше не будет)
    • +
    • Сигнал о завершении последовательности [[4](#notes)] (что означает, что новых данных больше не будет)
    • Ошибку, если последовательность завершилась по причине исключительной ситуации (это событие так же предполагает завершение последовательности)

    Observer

    @@ -202,7 +202,7 @@ s.onNext(2); ``` Безопасность не может быть гарантирована везде, где используется Rx, поэтому вам лучше быть в курсе и не нарушать этот принцип, так как это может привести к неопределенным последствиям. -notes +###### notes [1] Или знакомые всем Event Listeners. – Примеч. Автора [2] Я, все-таки считаю, что ключевой перегрузкой тут является именно версия с Observer в качестве аргумента, в оригинале в качестве примера приводится версия subscribe(Subscriber subscriber) – Примеч. Автора [3] Я буду использовать слово «выдавать», чтобы описать событие передачи данных от Observable Observer’у (to emit в ориг.). – Примеч. Автора From 04d27ed20a714156f908b07608c3a7df9ed19de2 Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Fri, 5 Oct 2018 16:33:33 +0300 Subject: [PATCH 25/34] Line breaks fixed for notes --- Part 1 - Getting Started/2. Key types.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Part 1 - Getting Started/2. Key types.md b/Part 1 - Getting Started/2. Key types.md index b0249c6..6176621 100644 --- a/Part 1 - Getting Started/2. Key types.md +++ b/Part 1 - Getting Started/2. Key types.md @@ -203,9 +203,9 @@ s.onNext(2); Безопасность не может быть гарантирована везде, где используется Rx, поэтому вам лучше быть в курсе и не нарушать этот принцип, так как это может привести к неопределенным последствиям. ###### notes -[1] Или знакомые всем Event Listeners. – Примеч. Автора -[2] Я, все-таки считаю, что ключевой перегрузкой тут является именно версия с Observer в качестве аргумента, в оригинале в качестве примера приводится версия subscribe(Subscriber subscriber) – Примеч. Автора -[3] Я буду использовать слово «выдавать», чтобы описать событие передачи данных от Observable Observer’у (to emit в ориг.). – Примеч. Автора +[1] Или знакомые всем Event Listeners. – Примеч. Автора\ +[2] Я, все-таки считаю, что ключевой перегрузкой тут является именно версия с Observer в качестве аргумента, в оригинале в качестве примера приводится версия subscribe(Subscriber subscriber) – Примеч. Автора\ +[3] Я буду использовать слово «выдавать», чтобы описать событие передачи данных от Observable Observer’у (to emit в ориг.). – Примеч. Автора\ [4] Автор использует термин последовательность (sequence), чтобы обозначить множество всех данных, которые может выдать Observable. – Примеч. Автора #### Продолжить чтение From 3325e6ca745435a184158e731a1f8df540f790b1 Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Fri, 5 Oct 2018 16:34:28 +0300 Subject: [PATCH 26/34] Fixed link in markup --- Part 1 - Getting Started/1. Why Rx.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Part 1 - Getting Started/1. Why Rx.md b/Part 1 - Getting Started/1. Why Rx.md index a13ec5b..7022081 100644 --- a/Part 1 - Getting Started/1. Why Rx.md +++ b/Part 1 - Getting Started/1. Why Rx.md @@ -45,5 +45,5 @@ Rx применяется для составления и обработки п | Назад | Вперед | | --- | --- | -| | [Ключевые типы](/Part%201%20-%20Getting%20Started/2.%20Key%20types.md) | +| | [Ключевые типы]() | From 881f2423131934326bc813e9ede9630a4a31570d Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Mon, 22 Oct 2018 19:03:21 +0300 Subject: [PATCH 27/34] Update 3. Lifetime management.md --- .../3. Lifetime management.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Part 1 - Getting Started/3. Lifetime management.md b/Part 1 - Getting Started/3. Lifetime management.md index 2d1c4fe..4e8d810 100644 --- a/Part 1 - Getting Started/3. Lifetime management.md +++ b/Part 1 - Getting Started/3. Lifetime management.md @@ -1,10 +1,10 @@ -# Lifetime management +# Жизненный цикл подписки -The idea behind Rx is that it is unknown *when* a sequence emits values or terminates, but you still have control over when you begin and stop accepting values. Subscriptions may be linked to allocated resources that you will want to release at the end of a sequence. Rx provides control over your subscriptions to enable you to do that. +Библиотека Rx основана на идее, что нам не известно *когда* последовательность выдаст значения или закончится, но у нас есть контроль того, когда начать или прекратить получать значения. Подписки могу быть привязаны к выделенным ресурсам, которые нужно освободить по окончании последовательности. Rx предоставляет контроль подписок, чтобы это было возможно. -## Subscribing +## Подписка -There are several overloads to `Observable.subscribe`, which are shorthands for the same thing. +Есть несколько перегрузок `Observable.subscribe`, которые выполняют одно и то же действие. ```java Subscription subscribe() @@ -15,9 +15,9 @@ Subscription subscribe(Observer observer) Subscription subscribe(Subscriber subscriber) ``` -`subscribe()` consumes events but performs no actions. The overloads that take one or more `Action` will construct a `Subscriber` with the functions that you provide. Where you don't give an action, the event is practically ignored. +`subscribe()` поглощает события, но не выполняет никаких действий. Перегрузки, которые получают одно и более `Action` создают `Subscriber` с функцией, которую вы предоставите. Если вы не предоставляете action, то события игнорируются. -In the following example, we handle the error of a sequence that failed. +В примере ниже мы обрабатываем ошибки в последовательности, которая завершается с ошибкой. ```java Subject s = ReplaySubject.create(); @@ -28,12 +28,13 @@ s.onNext(0); s.onError(new Exception("Oops")); ``` -Output +Вывод ``` 0 java.lang.Exception: Oops ``` +Если мы не предоставим функцию для обработки ошибок, то `OnErrorNotImplementedException` будет *выкинута* в месте, где вызывается `s.onError`, т.е. на стороне поставщика последовательности. If we do not provide a function for error handling, an `OnErrorNotImplementedException` will be *thrown* at the point where `s.onError` is called, which is the producer's side. It happens here that the producer and the consumer are side-by-side, so we could do a traditional try-catch. However, on a compartmentalised system, the producer and the subscriber very often are in different places. Unless the consumer provides a handle for errors to `subscribe`, they will never know that an error has occured and that the sequence was terminated. ## Unsubscribing From 7fedfa368e62c808ca39022ec337a586e3045ada Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Tue, 23 Oct 2018 11:16:17 +0300 Subject: [PATCH 28/34] Update 3. Lifetime management.md --- .../3. Lifetime management.md | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/Part 1 - Getting Started/3. Lifetime management.md b/Part 1 - Getting Started/3. Lifetime management.md index 4e8d810..c463cc5 100644 --- a/Part 1 - Getting Started/3. Lifetime management.md +++ b/Part 1 - Getting Started/3. Lifetime management.md @@ -34,19 +34,19 @@ s.onError(new Exception("Oops")); java.lang.Exception: Oops ``` -Если мы не предоставим функцию для обработки ошибок, то `OnErrorNotImplementedException` будет *выкинута* в месте, где вызывается `s.onError`, т.е. на стороне поставщика последовательности. -If we do not provide a function for error handling, an `OnErrorNotImplementedException` will be *thrown* at the point where `s.onError` is called, which is the producer's side. It happens here that the producer and the consumer are side-by-side, so we could do a traditional try-catch. However, on a compartmentalised system, the producer and the subscriber very often are in different places. Unless the consumer provides a handle for errors to `subscribe`, they will never know that an error has occured and that the sequence was terminated. +Если мы не предоставим функцию для обработки ошибок, то `OnErrorNotImplementedException` будет *выкинута* в месте, где вызывается `s.onError`, т.е. на стороне поставщика последовательности. В нашем примере поставщик и потребитель описаны рядом, потому очень просто можно добавить try-catch для обработки ошибки. Однако, в сложных модульных системах поставщик и потребитель очень часто находятся в разных местах. Если потребитель не предоставит обработчика ошибок в `subscribe`, то никогда и не узнает, что произошла какая-то ошибка и последовательность закончена. -## Unsubscribing -You can also stop receiving values *before* a sequence terminates. Every `subscribe` overload returns an instance of `Subscription`, which is an interface with 2 methods: +## Отписка + +Вы также можете прекратить получать значения *до* окончания последовательности. Каждая перегрузка `subscribe` возвращает экземпляр интерфейса `Subscription` с 2 методами: ```java boolean isUnsubscribed() void unsubscribe() ``` -Calling `unsubscribe` will stop events from being pushed to your observer. +Вызов `unsubscribe` остановит отправку событий вашему наблюдателю. ```java Subject values = ReplaySubject.create(); @@ -60,13 +60,13 @@ values.onNext(1); subscription.unsubscribe(); values.onNext(2); ``` -[Output](/tests/java/itrx/chapter1/UnsubscribingExample.java) +[Вывод](/tests/java/itrx/chapter1/UnsubscribingExample.java) ``` 0 1 ``` -Unsubscribing one observer does not interfere with other observers on the same observable. +Отписка одного наблюдателя не влияет на других наблюдателей того же observable. ```java Subject values = ReplaySubject.create(); @@ -82,7 +82,7 @@ subscription1.unsubscribe(); System.out.println("Unsubscribed first"); values.onNext(2); ``` -[Output](/tests/java/itrx/chapter1/UnsubscribingExample.java) +[Вывод](/tests/java/itrx/chapter1/UnsubscribingExample.java) ``` First: 0 Second: 0 @@ -92,7 +92,7 @@ Unsubscribed first Second: 2 ``` -## onError and onCompleted +## onError и onCompleted `onError` and `onCompleted` mean the termination of a sequence. An observable that complies with the Rx contract will not emit anything after either of those events. This is something to note both when consuming in Rx and when implementing your own observables. @@ -123,7 +123,7 @@ A `Subscription` is tied to the resources it uses. For that reason, you should r Subscription s = Subscriptions.create(() -> System.out.println("Clean")); s.unsubscribe(); ``` -[Output](/tests/java/itrx/chapter1/UnsubscribingExample.java) +[Вывод](/tests/java/itrx/chapter1/UnsubscribingExample.java) ``` Clean ``` @@ -148,8 +148,8 @@ There are several implementations of `Subscription`. We will see more of them later in this book. It is interesting to note that `Subscriber` also implements `Subscription`. This means that we can also use a reference to a `Subscriber` to terminate a subscription. -#### Continue reading +#### Продолжить чтение -| Previous | Next | +| Назад | Вперед | | --- | --- | -| [Key types](/Part%201%20-%20Getting%20Started/2.%20Key%20types.md) | [Chapter 2](/Part%202%20-%20Sequence%20Basics/1.%20Creating%20a%20sequence.md) | +| [Ключевые типы]() | [Chapter 2]() | From ce38c86a00317f870652a54296757932dc46616c Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Tue, 23 Oct 2018 11:58:22 +0300 Subject: [PATCH 29/34] Update 1. Creating a sequence.md --- Part 2 - Sequence Basics/1. Creating a sequence.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Part 2 - Sequence Basics/1. Creating a sequence.md b/Part 2 - Sequence Basics/1. Creating a sequence.md index a83b8b1..f05d5b1 100644 --- a/Part 2 - Sequence Basics/1. Creating a sequence.md +++ b/Part 2 - Sequence Basics/1. Creating a sequence.md @@ -302,4 +302,4 @@ Completed | Назад | Вперед | | --- | --- | -| [Жизненный цикл подписки](/Part%201%20-%20Getting%20Started/3.%20Lifetime%20management.md) | [Фильтрация последовательности](/Part%202%20-%20Sequence%20Basics/2.%20Reducing%20a%20sequence.md) | +| [Жизненный цикл подписки]() | [Фильтрация последовательности]() | From 34646fde931622cd1b1b068975c9ed121445a39c Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Tue, 23 Oct 2018 12:10:31 +0300 Subject: [PATCH 30/34] Update 3. Lifetime management.md --- Part 1 - Getting Started/3. Lifetime management.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Part 1 - Getting Started/3. Lifetime management.md b/Part 1 - Getting Started/3. Lifetime management.md index c463cc5..4e44b45 100644 --- a/Part 1 - Getting Started/3. Lifetime management.md +++ b/Part 1 - Getting Started/3. Lifetime management.md @@ -94,7 +94,7 @@ Second: 2 ## onError и onCompleted -`onError` and `onCompleted` mean the termination of a sequence. An observable that complies with the Rx contract will not emit anything after either of those events. This is something to note both when consuming in Rx and when implementing your own observables. +`onError` и `onCompleted` означают окончание последовательности. Observable выполняющее соглашения Rx не будет ничего выдавать после любого из этих событий. Это стоит помнить при потреблении событий в Rx и при реализации своих observables. ```java Subject values = ReplaySubject.create(); @@ -108,16 +108,16 @@ values.onNext(1); values.onCompleted(); values.onNext(2); ``` -[Output](/tests/java/itrx/chapter1/RxContractExample.java) +[Вывод](/tests/java/itrx/chapter1/RxContractExample.java) ``` First: 0 First: 1 Completed ``` -## Freeing resources +## Освобождение ресурсов -A `Subscription` is tied to the resources it uses. For that reason, you should remember to dispose of subscriptions. You can create the binding between a `Subscription` and the necessary resources using the [Subscriptions](http://reactivex.io/RxJava/javadoc/rx/subscriptions/Subscriptions.html) factory. +`Subscription` привязана к ресурсам, которые использует. По этой причине стоит помнить об освобождении подписок. Можно создать связь между `Subscription` и необходимыми ресусами при помощи фабрики [Subscriptions](http://reactivex.io/RxJava/javadoc/rx/subscriptions/Subscriptions.html). ```java Subscription s = Subscriptions.create(() -> System.out.println("Clean")); From e5c992a5dc39747f9f9b304e787c7660bb508b72 Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Tue, 23 Oct 2018 12:22:39 +0300 Subject: [PATCH 31/34] Update 3. Lifetime management.md --- Part 1 - Getting Started/3. Lifetime management.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Part 1 - Getting Started/3. Lifetime management.md b/Part 1 - Getting Started/3. Lifetime management.md index 4e44b45..e5266db 100644 --- a/Part 1 - Getting Started/3. Lifetime management.md +++ b/Part 1 - Getting Started/3. Lifetime management.md @@ -128,12 +128,12 @@ s.unsubscribe(); Clean ``` -`Subscriptions.create` takes an action that will be executed on unsubscription to release the resources. There also are shorthand for common actions when creating a sequence. -* `Subscriptions.empty()` returns a `Subscription` that does nothing when disposed. This is useful when you are required to return an instance of `Subscription`, but your implementation doesn't actually need to release any resources. -* `Subscriptions.from(Subscription... subscriptions)` returns a `Subscription` that will dispose of multiple other subscriptions when it is disposed. -* `Subscriptions.unsubscribed()` returns a `Subscription` that is already disposed of. +`Subscriptions.create` получает действие, которое будет выполнено при отписке для освобождения ресурсов. Также есть несколько сокращений для частых действий при создании последовательности. +* `Subscriptions.empty()` возвращает `Subscription`, которая ничего не делает при уничтожении. Это удобано, когда вам нужно вернуть экземпляр `Subscription`, но ваша реализация не нуждается в освобождении ресурсов. +* `Subscriptions.from(Subscription... subscriptions)` возвращает `Subscription`, которая уничтожает несколько других подписок при своём уничтожении. +* `Subscriptions.unsubscribed()` возвращает `Subscription`, которая уже уничтожена. -There are several implementations of `Subscription`. +Есть несколько реализаций `Subscription`. * `BooleanSubscription` * `CompositeSubscription` @@ -146,7 +146,7 @@ There are several implementations of `Subscription`. * `Subscriber` * `TestSubscriber` -We will see more of them later in this book. It is interesting to note that `Subscriber` also implements `Subscription`. This means that we can also use a reference to a `Subscriber` to terminate a subscription. +Мы рассмотрим больше их примеров позже в книге. Интересно отметить, что `Subscriber` также реализует `Subscription`. Это означает, что мы также можем использовать ссылку на `Subscriber` для прерывания подписки. #### Продолжить чтение From 9dd875ade7617e61f17362810f02294dfa6efa76 Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Tue, 23 Oct 2018 14:18:14 +0300 Subject: [PATCH 32/34] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B8=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=D0=B2=D0=B0=D0=BB=20=D1=81=D1=81=D1=8B=D0=BB?= =?UTF-8?q?=D0=BA=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Part 1 - Getting Started/3. Lifetime management.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Part 1 - Getting Started/3. Lifetime management.md b/Part 1 - Getting Started/3. Lifetime management.md index e5266db..064e479 100644 --- a/Part 1 - Getting Started/3. Lifetime management.md +++ b/Part 1 - Getting Started/3. Lifetime management.md @@ -152,4 +152,4 @@ Clean | Назад | Вперед | | --- | --- | -| [Ключевые типы]() | [Chapter 2]() | +| [Ключевые типы]() | [Часть 2]() | From 7fbdb8a02b190e8e7eb3459c893de1bede4ab4f5 Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Tue, 23 Oct 2018 19:12:26 +0300 Subject: [PATCH 33/34] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BD=D0=B0=D0=B2=D0=B8=D0=B3?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Part 2 - Sequence Basics/2. Reducing a sequence.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Part 2 - Sequence Basics/2. Reducing a sequence.md b/Part 2 - Sequence Basics/2. Reducing a sequence.md index 88eecc0..2699045 100644 --- a/Part 2 - Sequence Basics/2. Reducing a sequence.md +++ b/Part 2 - Sequence Basics/2. Reducing a sequence.md @@ -439,4 +439,4 @@ Subscription subscription = values | Назад | Вперед | | --- | --- | -| [Создание последовательности](/Part%202%20-%20Sequence%20Basics/1.%20Creating%20a%20sequence.md) | [Исследование последовательности](/Part%202%20-%20Sequence%20Basics/3.%20Inspection.md) | +| [Создание последовательности]() | [Исследование последовательности]() | From c88d10c1f9afeda088de4d29387ae0cabc1bb06a Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Tue, 23 Oct 2018 19:13:59 +0300 Subject: [PATCH 34/34] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BD=D0=B0=D0=B2=D0=B8=D0=B3?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Part 2 - Sequence Basics/3. Inspection.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Part 2 - Sequence Basics/3. Inspection.md b/Part 2 - Sequence Basics/3. Inspection.md index 97c7b57..a2f8413 100644 --- a/Part 2 - Sequence Basics/3. Inspection.md +++ b/Part 2 - Sequence Basics/3. Inspection.md @@ -338,4 +338,4 @@ Error: java.lang.Exception | Назад | Вперед | | --- | --- | -| [Фильтрация последовательности](/Part%202%20-%20Sequence%20Basics/2.%20Reducing%20a%20sequence.md) | [Агрегация](/Part%202%20-%20Sequence%20Basics/4.%20Aggregation.md) | +| [Фильтрация последовательности]() | [Агрегация]() |