相关疑难解决方法(0)

在RxJava中concatMap和flatMap有什么区别

似乎这两个功能非常相似.它们具有相同的签名(接受rx.functions.Func1<? super T, ? extends Observable<? extends R>> func),并且它们的大理石图看起来完全相同.不能在这里粘贴图片,但这里是concatMap的一个,这里是flatMap的一个.在结果的描述中似乎存在一些细微的差别Observable,其中一个由concatMap包含由结合的Observable产生的flatMap项产生,而由包含由首先合并结果的Observable 产生的项产生,并且发出该合并的结果.

然而,这种微妙之处对我来说完全不清楚.任何人都可以更好地解释这种差异,并且理想地给出一些说明这种差异的例子.

java rx-java flatmap concatmap

43
推荐指数
4
解决办法
2万
查看次数

Swift中flatMap和compactMap的区别

似乎在Swift 4.1 flatMap中已弃用.然而,Swift 4.1中 有一个新方法,compactMap它做同样的事情?有了flatMap你可以集合中变换的每个对象,然后删除在无任何项目.
像flatMap一样

let array = ["1", "2", nil] 
array.flatMap { $0 } // will return "1", "2"
Run Code Online (Sandbox Code Playgroud)

就像compactMap一样

let array = ["1", "2", nil] 
array.compactMap { $0 } // will return "1", "2"
Run Code Online (Sandbox Code Playgroud)

compactMap 正在做同样的事情.

这两种方法有什么区别?为什么Apple决定重命名该方法?

swift swift4 swift4.1

21
推荐指数
2
解决办法
9377
查看次数

如何组成Observable以避免给定的嵌套和依赖回调?

这个博客中,他给出了这个(复制/粘贴以下代码)回调地狱的例子.但是,没有提到如何使用Reactive Extensions消除该问题.

所以这里F3取决于F1完成,F4和F5取决于F2完成.

  1. 想知道Rx中的功能等价物是什么.
  2. 如何在Rx中表示F1,F2,F3,F4和F5都应该异步拉出?

注意:我目前正试图绕过Rx,所以在问这个问题之前我没有尝试解决这个例子.

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;

public class CallbackB {

    /**
     * Demonstration of nested callbacks which then need to composes their responses together.
     * <p>
     * Various different approaches for composition can be done but eventually they end up relying upon
     * synchronization techniques such as the CountDownLatch used here or converge on callback design
     * changes similar to <a href="https://github.com/Netflix/RxJava">Rx</a>.
     */ …
Run Code Online (Sandbox Code Playgroud)

java future rx-java

20
推荐指数
2
解决办法
1万
查看次数

reactor与反应堆中的flatMap

我已经找到了很多关于RxJava的答案,但我想了解它在Reactor中是如何工作的.

我目前的理解非常模糊,我倾向于认为map是同步的,而flatMap是异步的,但我不能真正理解它.

这是一个例子:

files.flatMap { it ->
    Mono.just(Paths.get(UPLOAD_ROOT, it.filename()).toFile())
        .map {destFile ->
            destFile.createNewFile()
            destFile    
        }               
        .flatMap(it::transferTo)
}.then()  
Run Code Online (Sandbox Code Playgroud)

我有文件(a Flux<FilePart>),我想将它复制到UPLOAD_ROOT服务器上的一些.

这个例子来自一本书.

我可以改变一切.map,以.flatMap反之亦然,一切仍然有效.我想知道区别是什么.

java project-reactor

20
推荐指数
3
解决办法
9559
查看次数

rxjava 中与 Observable 序列的一对多映射

给定一系列源对象的 Observable,如何使用 rxjava 将多个输出对象从每个输入对象映射出来?(一对多映射)

我有一份菜肴清单,代表构成餐厅订单的项目。我需要将每个 Dish 转换为一个或多个 OrderLine。每个 Dish 地图为其名称+价格创建一个 OrderLine,为每个 Topping 创建一个 OrderLine,如果有注释则创建一个 OrderLine。

INPUT
List dishes = {...}

OUTPUT
List orderLines = {...}

class Dish {

  public String name;
  public List toppings;
  public String note;
  public BigDecimal price;

}

class Topping {

  public String name;
  public BigDecimal price;

}

class OrderLine {

  public String name;
  public BigDecimal price;

}

Run Code Online (Sandbox Code Playgroud)

有没有办法使用函数式编程和/或反应式编程来做到这一点?

我不想使用命令式的东西,例如:


List orderLines = new ArrayList();
for (Dish dish : dishes) {

   orderLines.add(new OrderLine(dish.name, dish.price);

   for (Topping topping …
Run Code Online (Sandbox Code Playgroud)

java monads reactive-programming rx-java

5
推荐指数
1
解决办法
3691
查看次数