私が書いたケースクラスNodeがあり、そのリストを作成して最大ディスクを持つノードを見つける必要があります。 私は以下のコードを書いた、それを行う良い方法はありますか?また、私の実際の生産コードでは、私の "nodeList"変数はOption[List[Node]]
だけでなく、Future[Option[List[Node]]]
になります。私はまだ答え/コードは、私が地図/ flatMapをやって、未来に行って同じことをすることを除いて、あまり変わらないと思う。 誰かがScalaの方法でコードを書くより良い提案があれば、あなたの考えを分けてください。あなたが書いたコードから判断するケースクラスから最大値を取得するノードのリスト、スカラを返すOption [List]
scala> case class Node(disk: Integer, name: String)
定義されたクラスノード
scala> val nodeList = Option(List(Node(40, "node1"), Node(200, "node3"),Node(60, "node2")))
nodeList: Option[List[Node]] = Some(List(Node(40,node1), Node(200,node3), Node(60,node2)))
scala> val maxDisk = nodeList match {
| case None => println("List is empty"); None
| case Some(lst) => {
| Some(lst.max(Ordering.by((_:Node).disk)))
| }
| }`
maxDisk: Option[Node] = Some(Node(200,node3))
ありがとう。私は2つの質問があります。 1.私が行っているようにOption [List]を使用した場合、あなたの答えはより良い方法と考えられますか?これはあなたの答えに挑戦するのではなく、私のソリューションの機能があまり機能しないか、それほど望ましくない理由、そしてその理由を見極めることです。私自身の学習のためだけ 2.提案した2番目のアプローチは、オプションタイプIよりも優れていますか? 3.空リストの場合、私のゾルは壊れますか? – curiousengineer
1:あなたが単にすべてを使っていないという理由だけで 'Option [List] 'を使わないことをお勧めします。 'None'を' Some(Nil) 'と区別する必要がある場合は、必ずそれを使用してください。使用するには大きすぎるデータ型を使用しないようにする必要があります(使用しない値があります)。 2:私の2番目の解決策は、 'List [Node]'に切り替えた場合のコードの様子を示しています。それは良くないか悪いです。違いは 'Option [List]'と 'List'の答えです。 3:はい、元の解決策はあなたが 'Some(Nil)'を持っていれば壊れます。 – HTNW