在Scala中,如何返回属性设置为特定值的所有对象实例的列表

时间:2016-06-18 12:51:53

标签: scala

我正在使用Scala,并且希望能够选择属性设置为给定值的对象的所有实例。假设我有一个Order类和一个Order Item类,我想选择或拉出订单ID为1的所有订单项,并在列表中返回所有这些,我该怎么做?

我希望能够返回订单ID为1

的订单项列表

这是我的Line Item类定义: 代码:

case class LineItem(val itemId : Int, val orderId:Int, val productId:Int, val quantity:Int)

然后我在对象中定义了一些订单项:

代码:

object LineItem {

  val li1 = new LineItem(1, 1, 1, 10)
  val li2 = new LineItem(2, 1, 4, 1)
  val li3 = new LineItem(3, 1, 2, 1)
  val li4 = new LineItem(4, 1, 3, 1)
  val li5 = new LineItem(5, 2, 1, 1)
  val li6 = new LineItem(6, 1, 7, 1)

  var lineItems = Set(li1, li2, li3, li4, li5, li6)

  def findItemsInOrder(ordId:Int) = lineItems.find(_.orderId == ordId)

  }

正如您所见,其中5个订单项属于ID为1的订单。 因此,首先打印出一个订单列表供用户查看,然后我希望用户能够选择订单以查看该订单中的所有订单项,因此我希望这些订单项可以在外壳

因此订单ID由用户输入: 代码:

val orderNo = readLine("Which order would you like to view?").toInt

然后这一行: 代码:

println("OrderID: " + LineItem.findItemsInOrder(orderNo).get.orderId + ", ProductID: " + LineItem.findItemsInOrder(orderNo).get.productId + ", Quantity: " + LineItem.findItemsInOrder(orderNo).get.quantity)

仅打印出订单ID为1的第一个订单项。

然后我尝试遍历所有订单项,例如:

代码:

var currentLineItems = new ListBuffer[LineItem]()

for (item <- LineItem.lineItems){
  val item1: LineItem = LineItem(LineItem.findItemsInOrder(orderNo).get.lineId, LineItem.findItemsInOrder(orderNo).get.orderId, LineItem.findItemsInOrder(orderNo).get.productId, LineItem.findItemsInOrder(orderNo).get.quantity)
  currentLineItems += item1
}

for (item <- currentLineItems ){
  println("OrderID: " + LineItem.findItemsInOrder(orderNo).get.orderId + ", ProductID: " + LineItem.findItemsInOrder(orderNo).get.productId + ", Quantity: " + LineItem.findItemsInOrder(orderNo).get.quantity)
}

但是这段代码只打印了6次相同的订单项。

我将非常感谢任何帮助解决我的问题的帮助

由于 济

1 个答案:

答案 0 :(得分:1)

定义findItemsInOrder以过滤掉列表中与订单ID匹配的所有元素:

def findItemsInOrder(ordId: Int): List[LineItem] = lineItems.filter(_.orderId == ordId)

find将找到与id 匹配的第一个元素,如果找到则返回Some[T],其中T是元素类型,否则None

  

查找满足谓词的序列的第一个元素(如果有的话)。

如果您有多个与ID匹配的元素,则需要filter

  

选择满足谓词的此可遍历集合的所有元素。