标签: flatmap

flatten和flatMap(身份)之间有什么区别吗?

scala> List(List(1), List(2), List(3), List(4))
res18: List[List[Int]] = List(List(1), List(2), List(3), List(4))

scala> res18.flatten
res19: List[Int] = List(1, 2, 3, 4)

scala> res18.flatMap(identity)
res20: List[Int] = List(1, 2, 3, 4)
Run Code Online (Sandbox Code Playgroud)

这两个功能有什么区别吗?何时使用一个而不是另一个?有任何权衡吗?

functional-programming scala flatmap

7
推荐指数
2
解决办法
5968
查看次数

std :: iter :: FlatMap.clone()可能吗?

我试图创建所有可能的项目对FlatMap:

possible_children.clone().flat_map(|a| possible_children.clone().map(|b| (a,b)))
Run Code Online (Sandbox Code Playgroud)

为了做到这一点,我试图克隆一个FlatMap,我在文档中看到FlatMap结构实现了一个clone方法.但似乎不可能创造FlatMap满足特征界限的东西.

这是我得到的错误:

error: no method named `clone` found for type `std::iter::FlatMap<std::ops::Range<u16>, _, [closure@src/main.rs:30:47: 33:27]>` in the current scope
  --> src/main.rs:37:66
   |
37 |         possible_children.clone().flat_map(|a| possible_children.clone().map(|b| (a,b)))
   |                                                                  ^^^^^
   |
   = note: the method `clone` exists but the following trait bounds were not satisfied: `[closure@src/main.rs:30:47: 33:27] : std::clone::Clone`
Run Code Online (Sandbox Code Playgroud)

看看我看到的文档:

impl<I, U, F> Clone for FlatMap<I, U, F>
    where F: Clone, I: Clone, U: Clone + IntoIterator, U::IntoIter: …
Run Code Online (Sandbox Code Playgroud)

clone rust flatmap

7
推荐指数
1
解决办法
250
查看次数

RxJS/Observable flatMap可以返回Observable或数组

有人可以向我解释为什么.flatMap操作员可以接受返回的函数Observable,或者array

官方的文档说:

FlatMap运算符通过将您指定的函数应用于源Observable发出的每个项来转换Observable,其中该函数返回一个本身发出项的Observable.

为什么它也会返回一个数组

例如,这些都是有效的:

obs$.flatMap((data) => {
    return [];
});

obs$.flatMap((data) => {
    return new Observable<string>();
});
Run Code Online (Sandbox Code Playgroud)

但这不起作用:

obs$.flatMap((data) => {
    return 1;
});
Run Code Online (Sandbox Code Playgroud)

observable rxjs flatmap angular

7
推荐指数
1
解决办法
2475
查看次数

使用带有字典的flatMap会产生元组吗?

我有一个非常基本和直接的对象映射到字典.我在顶层使用和解析字典.其中一个字段是一系列其他字典.设置它们我使用的flatMap似乎是一个合适的方法,但由于里面的对象不可为空,这个方法突然返回元组(至少看起来像这样)而不是字典.

我创建了一个最小的例子,几乎可以在任何执行任何地方粘贴到新项目中,这应该提供更好的细节,然后是任何描述:

func testFlatMap() -> Data? {

    class MyObject {
        let a: String
        let b: Int
        init(a: String, b: Int) { self.a = a; self.b = b }

        func dictionary() -> [String: Any] {
            var dictionary: [String: Any] = [String: Any]()
            dictionary["a"] = a
            dictionary["b"] = b
            return dictionary
        }
    }

    let objects: [MyObject] = [
        MyObject(a: "first", b: 1),
        MyObject(a: "second", b: 2),
        MyObject(a: "third", b: 3)
    ]

    var dictionary: [String: Any] = [String: Any]()
    dictionary["objects"] = …
Run Code Online (Sandbox Code Playgroud)

ios flatmap swift swift4

7
推荐指数
1
解决办法
1669
查看次数

使用Java 8 Streams创建和反转MultiMap

如何将a Set<Result>转换为Map<Item, Set<String>>SetMultimap<Item, String>使用Java 8流或Multimaps,其中Result:

class Result {
    String name;
    Set<Item> items;
}
Run Code Online (Sandbox Code Playgroud)

例如,我从:

result1:
    name: name1
    items:
        - item1
        - item2
result2:
    name: name2
    items:
        - item2
        - item3
Run Code Online (Sandbox Code Playgroud)

并以:

item1:
    - name1
item2:
    - name1
    - name2
item3:
    - name2
Run Code Online (Sandbox Code Playgroud)

multimap java-8 java-stream flatmap

6
推荐指数
1
解决办法
1801
查看次数

为什么“flatMap”在 Scala 中使用 Option 类型的序列?

我无法弄清楚 Scala 编译器如何弄清楚如何使用sflatMap序列Option

如果我flatMap在一系列序列上使用 a :

println(Seq(Seq(1), Seq()).flatMap(a => a)) // List(1)
Run Code Online (Sandbox Code Playgroud)

它将连接所有嵌套序列

如果我将它与一系列Options一起使用,也会发生同样的情况:

println(Seq(Some(1), None).flatMap(a => a)) // List(1)
Run Code Online (Sandbox Code Playgroud)

因此,在这种情况下,flatMapOption视为集合。问题是为什么这样做?该flatMap定义如下:

def flatMap[B, That](f: A => GenTraversableOnce[B])(implicit bf: CanBuildFrom[Repr, B, That]): That
Run Code Online (Sandbox Code Playgroud)

这意味着它需要一个返回 实例的函数GenTraversableOnce,但Option不继承GenTraversableOnce。它只继承ProductSerializable,并Product继承Equals

在这种情况下,Scala 编译器如何使用sflatMap的序列Option

scala optional flatmap

6
推荐指数
1
解决办法
542
查看次数

从ES6 map()函数返回多个值

说我有这样的事情:

let values = [1,2,3,4]; 

let newValues = values.map((v) => {
  return v *v ; 
}); 

console.log(newValues); //[1,4,9,16]
Run Code Online (Sandbox Code Playgroud)

挺直的.

现在,如果我想为每个对象返回多个值,该怎么办?

例如.

let values = [1,2,3,4]; 

let newValues = values.map((v) => {
  return [v *v, v*v*v, v+1] ; 
}); 

console.log(newValues); //This is what I want to get 
                        //[1, 1, 2, 4, 8, 3, 9, 27, 4, 16, 64, 5]
Run Code Online (Sandbox Code Playgroud)

我可以使用reduce函数

let values = [1,2,3,4]; 

let newValues = values.map((v) => {
  return [v *v, v*v*v,v+1] ;
}).reduce((a, c) => {

  return a.concat(c); …
Run Code Online (Sandbox Code Playgroud)

collections ecmascript-6 flatmap

6
推荐指数
3
解决办法
1万
查看次数

在flatMap中"无法转换返回表达式",其中包含无意义的表达式

我正在检查.lazy高阶函数,并且得到了一些与flatMap函数相关的有趣编译错误(可能还有其他函数)

例子

 
let array = [1, 2, 3, 4, 5, 6]

array
    .flatMap {
        print("DD")
        return $0 // Cannot convert return expression of type 'Int' to return type 'String?'
    }
    .forEach {
        print("SS")
        print($0)
}

评论一下

 
array
    .flatMap {
//        print("DD")
        return $0
    }
    .forEach {
        print("SS")
        print($0)
}

一切正常......更有趣的例子

 
array
    .flatMap {
        let z = $0
        return $0  // Or return z - all is the same "Cannot convert return expression of type 'Int' to return type …

arrays flatmap swift

6
推荐指数
1
解决办法
594
查看次数

如何将此 rxjava/rxkotlin flatMap 转换为 lambda 表达式?

    Observable.just(1)
            .flatMap(object : Function<Int, Observable<Int>> {
                override fun apply(integer: Int): Observable<Int> {
                    return Observable.just(integer * 10)
                }
            })
            .flatMap(object : Function<Int, Observable<Int>> {
                override fun apply(integer: Int): Observable<Int> {
                    return Observable.just(integer * 20)
                }
            })
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(object : Observer<Int> {
                override fun onComplete() {
                }

                override fun onSubscribe(d: Disposable) {
                }

                override fun onNext(t: Int) {
                    Log.d("result", "" + t)
                }

                override fun onError(e: Throwable) {
                    e.printStackTrace()
                }
            })
Run Code Online (Sandbox Code Playgroud)

lambda android rx-java flatmap rx-kotlin

6
推荐指数
1
解决办法
5028
查看次数

为什么将 flatMap 与异步函数一起使用不会返回展平数组?

我想了解为什么使用.flatMap()withasync不会返回展平数组。

例如,对于 Typescript,这会返回一个数字数组: 我知道,对于简单的数字数组来说是没有用的,它只是更容易Promisse.all复制async

const numbers = [[1], [2], [3]];
// typed as number[]
const numbersFlatten = await Promise.all(
    numbers.flatMap((number) => number),
);
Run Code Online (Sandbox Code Playgroud)

对于 Typescript,当这返回一个数字数组的数组时(刚刚添加了一个异步):

const numbers = [[1], [2], [3]];
// typed as number[][]
const numbersFlatten = await Promise.all(
    numbers.flatMap(async (number) => number),
);
Run Code Online (Sandbox Code Playgroud)

javascript typescript flatmap

6
推荐指数
1
解决办法
2746
查看次数