标签: flatmap

在展平函数中使用的模式匹配中的列表[_]的说明

我是scala的新手,我无法理解以下功能

val L = List(List(1, 1), 2, List(3, List(5, 8)))       

def flatten(l: List[Any]): List[Any] =  l flatMap {
    case ms:List[_] => flatten(ms)
    case l => List(l)
}                                         

flatten(L)                      // res2: List[Any] = List(1, 1, 2, 3, 5, 8)
Run Code Online (Sandbox Code Playgroud)

特别是我不理解第一种情况的组合flatMap和模式匹配以及意义ms:List[_]

有人可以解释一下,也许可以提供一个更简单的例子来澄清这个概念吗?

scala pattern-matching partial-functions flatmap

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

斯卡拉印刷字长直方图斯卡拉

我将输入一组行作为输入并跟踪字长的分布.额外的空白区域(包括输入中的换行符)无关紧要.在输入结束后,输出是基于文本的字长分布直方图:例如:"嘿,你好,你好"

输出:1 - 0,2 - 1,3 - 5,4 - 1,5 - 0

where(第一个字符是单词的长度,第二个字符是该长度的单词).我已经写了

val lines = scala.io.Source.stdin.getLines
val words = lines.flatMap(_.split("\\W+"))
Run Code Online (Sandbox Code Playgroud)

我想组合相同长度的单词,然后将它们存储在迭代器或映射中

val list2 = words.groupby(e.length => e.length).mapValues(_.length) 
Run Code Online (Sandbox Code Playgroud)

没有给我想要的结果.有什么建议?

scala flatmap

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

Scala - Flatmap 一系列选项和可遍历

考虑在某些大小写匹配上编写的 flatMap。例如:

list.flatMap( v =>
    v match {
        case Cond1 => if(something) Some(Int) else None
        //..Other conditions yielding Option[Int]
        case CondN => if(somethingelse) Seq(Int) else Seq()
    })
Run Code Online (Sandbox Code Playgroud)

但是这不会编译。如果 seq 是 Option[Int] 的全部或 Seq[Int] 的全部,则 flatMap 可以工作。但如果 Seq 是选项和 Seq 的混合,则不然。为什么会有这样的限制?这是否解决了我现在无法想到的特定歧义。

EDIT1 从 REPL 添加代码片段

scala> val a = Seq(Option(1), Seq(2,3))
a: Seq[Equals] = List(Some(1), List(2, 3))

scala> val b = Seq(Seq(1), Seq(2,3))
b: Seq[Seq[Int]] = List(List(1), List(2, 3))

scala> a.flatMap(x=>x)
<console>:9: error: type mismatch;
 found   : Equals
 required: scala.collection.GenTraversableOnce[?]
              a.flatMap(x=>x) …
Run Code Online (Sandbox Code Playgroud)

scala flatmap

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

Python:展平对象列表

我有一个对象列表,每个对象内部都有一个其他对象类型的列表。我想提取这些列表并创建另一个对象的新列表。

List1:[Obj1, Obj2, Obj3]

Obj1.myList = [O1, O2, O3]
Obj2.myList = [O4, O5, O6]
Obj3.myList = [O7, O8, O9]
Run Code Online (Sandbox Code Playgroud)

我需要这个:

L = [O1, O2, O3, O4, ...., O9];

我试过了extend()reduce()但没有用

bigList = reduce(lambda acc, slice: acc.extend(slice.coresetPoints.points), self.stack, [])
Run Code Online (Sandbox Code Playgroud)

聚苯乙烯

寻找 python flatten 列表列表没有帮助,因为我得到了其他对象的列表列表。

python list python-2.7 flatmap

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

如何在Kotlin中的对内Flatmap集合

在这个例子中,我必须上课.

Order(selections: List<Selection>, discount: Double, ...)
Selection(productId: Long, price: Double, ...)
Run Code Online (Sandbox Code Playgroud)

然后我继续收集Order我想要计算之后需要使用的价格Selection's priceOrder's discount.我怎样才能做到这一点?

我尝试执行以下操作,但似乎不可能.

val orderList: List<Order> = loadFromDB()

orderList.map { Pair(it.selections, it.discount) }  
.flatMap { /* Here I want to get list of Pair of selection from all orders with discount. */}
Run Code Online (Sandbox Code Playgroud)

一旦我收集了,Pair(Selection, discount)那么我可以继续进一步计算.这可能以这种形式吗?我需要将链条分开吗?

higher-order-functions kotlin flatmap

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

使用flatMap将地图列表转换为地图

我该如何合并List<Map<String,String>>Map<String,String>使用flatMap

这是我尝试过的:

final Map<String, String> result = response
    .stream()
    .collect(Collectors.toMap(
        s -> (String) s.get("key"),
        s -> (String) s.get("value")));
result
    .entrySet()
    .forEach(e -> System.out.println(e.getKey() + " -> " + e.getValue()));
Run Code Online (Sandbox Code Playgroud)

这不起作用.

java java-8 flatmap

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

展平 Scala 中的嵌套对象

给定一个如下所示的复杂对象:

case class Complex
(
  id: Long,
  name: String,
  nested: Seq[Complex]
)
Run Code Online (Sandbox Code Playgroud)

在实际操作中,这可能会变成这样:

val stuff =
  List(
    Complex(1, "name1",
      List(
        Complex(2, "name2", List()),
        Complex(3, "name3",
          List(
            Complex(4, "name4", List())
          )
        )
      )
    )
  )
Run Code Online (Sandbox Code Playgroud)

我需要将其变成一个平面Complex对象列表,将所有子/孙子拉起来。

val flattened =
  List(
    Complex(1, "name1", List()),
    Complex(2, "name2", List()),
    Complex(3, "name3", List()),
    Complex(4, "name4", List()),
  )
Run Code Online (Sandbox Code Playgroud)

您对我如何实现这一目标有任何线索/想法吗?

我尝试过的其他解决方案似乎只做简单的列表嵌套。我尝试过的事情:

这些似乎都产生了与我开始时相同的列表。

scala flatten flatmap

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

如何替换字符串中的所有元音?

我尝试使用此代码:

let vowels: [Character] = ["a","e","i","o","u", "y"]

let replaced = String(myString.map {
     $0 == vowels.contains($0) ? "1" : "0"
 })
Run Code Online (Sandbox Code Playgroud)

但我有错误: Binary operator '==' cannot be applied to operands of type 'Character' and 'Bool'

怎么了?

string ios flatmap swift

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

理解compactMap和flatMap的问题

我已经从flatMap/compactMap用于flatten数组数组的多个教程中进行了遍历,但就我而言,它不起作用或无法正确理解。

let myArray = [["Raja","Kumar", nil,"Waqas"],["UAE","SINGAPORE","dUBAI","HONGKONG"]]
let final = myArray.compactMap{ $0 }

print("Result:\(final)")
Run Code Online (Sandbox Code Playgroud)

输出:

Result:[[Optional("Raja"), Optional("Kumar"), nil, Optional("Waqas")], [Optional("UAE"), Optional("SINGAPORE"), Optional("dUBAI"), Optional("HONGKONG")]]
Run Code Online (Sandbox Code Playgroud)

我尝试从上述数组中删除nil,但仍然不能使我的数组变平。

任何帮助将非常感激。

arrays flatmap swift

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

使用 Java-Streams 从这些对象的两个字符串字段的不同字符串值列表的自定义对象列表中获取

自定义类对象中特定字段的 Java 流

我有一个ArrayList对象Train

每个Train都有三个字段sourcedestinationcost

我想获取所有地名,即所有不同的来源+目的地

我正在使用下面的代码,但正如可以观察到的那样,我使用两个流来检索数据。

List<String> destinations = list.stream()
    .map(x -> x.getDestination())
    .distinct()
    .collect(Collectors.toList());

List<String> sources = List.stream()
    .map(x -> x.getSource())
    .distinct()
    .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

我想知道如何在单个流中完成同样的事情?可以使用 来完成吗flatMap,还是有其他方法可以实现这一目标?

List<String> allPlaces = ?
Run Code Online (Sandbox Code Playgroud)

另外,是否可以使用Train没有吸气剂的类?

java java-stream flatmap

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