标签: flatmap

flatMap中的性能差异与for-comprehension相比

我还是Scala的新手,我读过的其中一件事就是for-comprehension在某种程度上等同于flatMap.但是,在我的代码(下面)中,flatMap的计算时间至少是两倍.这可能是什么原因?

这是一个缓慢的:

facts.flatMap(f => factActionsMap(f)).filter(_.isValid(facts))
Run Code Online (Sandbox Code Playgroud)

这是快速等效的:

for {
  f <- facts
  a <- factActionsMap(f)
  if a.isValid(facts)
} yield a
Run Code Online (Sandbox Code Playgroud)

factActionsMapFact和之间的地图Set[Action]. facts只是一个Set[Fact].

scala for-comprehension flatmap

0
推荐指数
1
解决办法
1200
查看次数

Scala Flatmap on Array里面的值部分

我有RDD喜欢(a,b,数组(p1,p2,p3),c),我想在数值里面的数值应用flatmap来得到下面的输出.(a,b,p1,c)(a,b,p2,c)(a,b,p3,c)

scala flatmap apache-spark

0
推荐指数
1
解决办法
1990
查看次数

为什么在RxJava中通过merge实现flatMap?

为什么RxJava 1.x flatMap()运算符是通过merge实现的?

public final <R> Observable<R> flatMap(Func1<? super T, ? extends Observable<? extends R>> func) {
        if (getClass() == ScalarSynchronousObservable.class) {
            return ((ScalarSynchronousObservable<T>)this).scalarFlatMap(func);
        }
        return merge(map(func));
    }
Run Code Online (Sandbox Code Playgroud)

从flatMap()调用中,我只能返回一个符合的Observable <? extends Observable<? extends R>>。比map(func)调用将它包装到另一个Observable中,这样我们就得到了这样的东西Observable<? extends Observable<? extends R>>。这使我认为map(func)之后的merge()调用是不必要的。

据说merge()运算符执行以下操作:

将可发射Observable的Observable展平为单个Observable,该Observable发射那些Observable发射的项目,而无需进行任何转换。

现在,在平面地图内,我们只能有一个Observable发出一个Observable。为什么要合并?我在这里想念什么?

谢谢。

rx-java flatmap rx-android

0
推荐指数
1
解决办法
1324
查看次数

如何使用Option或PartialFunction简化方法

我需要一些帮助来修改(简化)我的代码.
这是一个例子:

def getBids(rawBids: RDD[List[String]], exchangeRates: Map[String, Double]): RDD[BidItem] = {
    rawBids.filter(bidList => !bidList(2).matches(ERROR_REGEXP))
      .flatMap(bidList => {
        Constants.TARGET_LOSAS.map { losa =>
          val indexOfLosa = Constants.BIDS_HEADER.indexOf(losa)
          if (bidList(indexOfLosa) != null && !bidList(indexOfLosa).equals("") && isDoubleNumber(bidList(indexOfLosa))) {
            BidItem(bidList.head, bidList(1), losa, bidList(indexOfLosa).toDouble)
          } else {
            BidItem(bidList.head, bidList(1), losa, 0)
          }
        }
      })
      .filter(unit => unit.price != 0)
      .map(unit => {
        val convertedPrice = usdToEur(unit.price, unit.bidDate, exchangeRates)
        val convertedDate = changeDateFormat(unit.bidDate)
        BidItem(unit.motelId, convertedDate, unit.loSa, convertedPrice)
      })
  }
Run Code Online (Sandbox Code Playgroud)

我需要更改flatMap方法并避免使用"ELSE"部分代码的情况
据我所知,我们可以使用部分函数或[Option].如果我们的"if"语句为FALSE,它可以帮助我们避免情况.如果我从代码中删除ELSE部分,scala不会给我机会编译我的代码.谢谢!

scala partialfunction flatmap

0
推荐指数
1
解决办法
177
查看次数

根据前一个元素的每个值的百分比差异创建一个数组

我有一个如下数组:

var array: [Double] = [4, 5, 2, 4, 3, 6]
Run Code Online (Sandbox Code Playgroud)

我想要做的是从这个数组创建一个新数组,其中包含每个值与前一个值相比的百分比差异.所以我上面的数组看起来像:

var newArray = [0, 25, -60, 100, -25, 100]
Run Code Online (Sandbox Code Playgroud)

如果这有道理?非常感谢任何帮助,非常感谢!!

arrays flatmap swift

0
推荐指数
1
解决办法
81
查看次数

Kotlin:如何根据对象值将对象列表转换为集合

请建议将路线转换为routeMap的更好方法。

lateinit var routes: List<Pair<String, String>>
val routesMap = HashMap<String, ArrayList<String>>
routes.forEach { 
    routesMap.getOrPut(it.first) { ArrayList<String>() }.add(it.second)
}
Run Code Online (Sandbox Code Playgroud)

collections android kotlin java-stream flatmap

0
推荐指数
1
解决办法
753
查看次数

使用java中的流按顺序打印列表的数据

我有下面的清单。

List<String> firstName = List.of("Monika","Shweta", "Shruti","Anuradha");
List<String> lastName = List.of("Mishra","Hariharno","Sharma","Mishra");
List<Integer> sal = List.of(5000000,50,500,100000);

List<List<?>> finalList = List.of(firstName,lastName,sal);
finalList.stream().flatMap(s->s.stream()).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

当我使用它打印时,flatMap()它会打印所有firstname, lastname, 然后sal.

我想firstName : lastName:sal按顺序将所有这些打印在一起。例如

Monika:Mishra:5000000
Run Code Online (Sandbox Code Playgroud)

是否可以使用flatMap或任何其他java8功能?

java list java-8 java-stream flatmap

0
推荐指数
1
解决办法
123
查看次数