给定输入List(1,2,3,4,5)
,编写一个可以传递给flatMap的函数,并返回结果List(1,2,2,3,3,4,4,5)
。
我写的解决方案如下:
object Main extends App {
val intList = List(1,2,3,4,5)
def returnTwo(arg: Int): List[Int] = List(arg, arg + 1)
val newList = intList.flatMap(returnTwo).filter(_ <= 5)
println(newList)
}
输出:
List(1, 2, 2, 3, 3, 4, 4, 5, 5)
如何处理列表中的额外5,同时坚持原始问题?
答案 0 :(得分:1)
你已经实现了这个功能。你唯一的问题是尾随额外的5.你可以使用init
函数来处理它,它除了List
的最后一个元素之外的所有元素。
val newList = intList.flatMap(returnTwo).filter(_ <= 5).init
答案 1 :(得分:1)
这个也很好
object Main extends App
{
val input = List(1,2,3,4)
def add(x: Int)= List (x,x+1)
val result = input.flatMap(a=>add(a))
println(result)
}
答案 2 :(得分:0)
如果输入列表总是给定列表,即List(1,2,3,4,5),那么我们可以稍微硬编码,无论如何你已经使用过滤器了。
object Main extends App {
val intList = List(1,2,3,4,5)
def returnTwo(arg: Int): List[Int] = {
if(arg == 1 || arg == 5) List(arg) else List(arg,arg)
}
val newList = intList.flatMap(returnTwo)
println(newList)
}
答案 3 :(得分:0)
如@ sepp2k所述,您的示例在初始列表中有5
。以下是另一个不需要flatMap
或过滤的实现。
def returnTwo (list: List[Int]): List[Int] = {
list match {
case Nil => List.empty[Int]
case head :: tail => List(head, head + 1) ++ returnTwo(tail)
}
}
returnTwo(List(1,2,3,4))
答案 4 :(得分:0)
intList.head +: intList.init.tail.flatMap(returnTwo) :+ intList.last