我有一个案例类节点,我已经写了,并从中创建一个列表,我需要找到具有最大磁盘的节点。 我写了下面的代码,有没有更好的方法呢?另外,在我的实际生产代码中,我的“nodeList”变量将不只是Option[List[Node]]
而且Future[Option[List[Node]]]
。我猜想答案/代码不会改变太多,除非我会做一个map/flatMap去面向未来并且做同样的事情。 如果有人有更好的建议写下面的代码更多斯卡拉的方式,请分享你的想法。从案例类获取最大值节点列表,返回Scala选项[列表]
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.您提出的第二种方法,比使用选项类型I a好吗? 3.如果列表为空,我的sol会打破? – curiousengineer
1:我建议不要使用'Option [List]'只是因为你没有使用它。如果你需要告诉'None'除了'Some(Nil)'以外,那么一定要用它。您应该尽量避免使用“太大”的数据类型供您使用(它们具有您不使用的值)。 2:我的第二个解决方案只是告诉你,如果你切换到List [Node],代码将会是什么样子。这不是更好或更糟;不同之处在于你对'Option [List]'和'List'的回答。 3:是的,如果你有'Some(Nil)',你的原始解决方案将会中断。 – HTNW