I am new to Scala Collections and currently I want to separate a given list of strings into a tuple of two lists (List[String], List[String])
, which contains list of palindrome strings and rest of the of the input strings.
For example,
if input is List("racecar", "abcd", "lilil", "effg")
output should be (List("racecar", "lilil"), List("abcd", "effg"))
I have got a solution using filter. But, currently, trying to refine my solution using foldLeft. My new approach is as follows:
def stringTuples2(strings: List[String]): (List[String], List[String]) = {
strings.foldLeft((List[String](), List[String]()))((b, a) => {
if (a.equals(a.reverse)) { b._1 :+ a; b }
else { b._2 :+ a; b }
})}
I am not sure, what I am doing wrong, but the output for this solution is Tuple of two empty lists, i.e. (List(), List()).
Help is appreciated. Thanks!
Your attempt to modify b
creates a new List
, you then throw the new List
away and return b
, which is unchanged. Take out the ;b
part and return the updated tuple: (b._1 :+ a, b._2)
or (b._1, b._2 :+ a)
BTW, here's a different approach to the solution.
List("racecar", "abcd", "lilil", "effg").partition(s => s == s.reverse)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With