2017-10-20 2 views
-1

enter image description here Pour une entrée List(1,2,3,4,5), écrivez une fonction qui peut être transmise à flatMap, et renvoyez le résultat List(1,2,2,3,3,4,4,5).Étant donné une liste d'entrée (1,2,3,4,5), écrire une fonction qui peut être transmise à flatMap, et retourner le résultat Liste (1,2,2,3,3,4,4,5)

La solution que j'ai écrit est la suivante:

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) 
} 

sortie:

List(1, 2, 2, 3, 3, 4, 4, 5, 5) 

Comment puis-je faire face à la 5 supplémentaire dans la liste, tout en collant au problème initial?

+1

Dans la description que vous parlez d'une liste d'entrée de '1,2,3,4' (et rien dire' filter'), mais dans le code que vous utilisez une liste contenant ' 1,2,3,4,5'. – sepp2k

+0

Nous avons besoin d'une clarification de l'affectation car aucune des réponses (à l'exception de @ AkshanshJain, mais en incluant les vôtres) renvoie le résultat de flatMap, elles ont besoin d'une manipulation ultérieure. Si le résultat doit provenir directement du 'flatMap' c'est assez difficile ... –

+0

Je ne reçois pas la sortie requise .Actucal o/p devrait être List (1,2,2,3,3,4,4,5) mais je suis après avoir implémenté le filtre sur flatmap est List (1,2,2,3,3,4,4,5,5) ce qui n'est pas correct. –

Répondre

0

Si la liste d'entrée est toujours la liste donnée, c'est-à-dire Liste (1,2,3,4,5), nous pouvons alors coder en dur un peu, ce que vous avez déjà fait avec votre filtre.

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) 
} 
0

Comme mentionné par @ sepp2k, votre exemple a 5 dans la liste initiale. Voici une autre implémentation qui ne nécessite pas de flatMap ou de filtrage.

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)) 
+0

"ne nécessite pas flatMap" et ne répond donc pas à la question? "écrire une fonction qui peut être transmise sur flatmap," –

+0

l'exigence de la question est à l'utilisateur filterMap.SS ci-joint –

1

vous avez déjà implémenté la fonction. Votre seul problème est le supplément 5. Vous pouvez le traiter en utilisant la fonction init, qui prend tout l'élément sauf le dernier élément d'un List.

val newList = intList.flatMap(returnTwo).filter(_ <= 5).init 
+0

merci beaucoup .ce travail ... –

+0

vous pouvez me remercier en upvoting et si possible en acceptant la réponse :) –

0
intList.head +: intList.init.tail.flatMap(returnTwo) :+ intList.last