So。シナリオ:foldLeft on Iterable(ストリング、(Long、Long))
私は、リストのこの種類があります。
("USER1",(24,11))
("USER2",(10,7))
("USER2",(1,10))
("USER1",(2,3))
("USER3",(3,4))
を、私はgroupBy
にすべてのユーザーのすべての情報を必要として、すべてのタプルの情報を合計します。
だから私の予想される出力は次のようになります。
("USER1",(26,14))
("USER2",(11,17))
("USER3",(3,4))
私はこの次のコードでこれを実現:
あなたが見ることができるようにuserInfo
が
Iterable[String,(Long,Long)]
で、私は私foldLeftを、使用
userInfo.groupBy(elem => elem._1).map(_._2).map { user =>
{
val sums = user.foldLeft(("", (0L, 0L)))((acc, newElem) =>
(acc._1,
(acc._2._1 + newElem._2._1, acc._2._2 + newElem._2._2)))
}
(user._1,sums)
}
私は本当にfoldLeftで気にしないので、すべてのタプルの最初の要素を無視します。
私はそれがかなりひどいコードを見つけるために、基本的にこれはfoldLeft
空の文字列を持っているので、これは良い解決策があるのだろうか?
ない答えが、それはあることは注目に値しますCatsでは 'userInfo.foldMap(Map(_))'と書くことができます。 –
@TravisBrown Catsは言語ですか?あなたのコメントを理解するにはあまりにも無知ですか? –
申し訳ありませんが、[foldMap]のような抽象と便利なものを提供する[Scalaのライブラリ](https://github.com/typelevel/cats)です。 –