2017-05-27 68 views
1

Example类型具有以下元素的列表:斯卡拉:获取列表的元素与两个限制

Example("One", "1", null) 
Example("Two", "1", null) 
Example("Three", "2", someObject) 
Example("Four", "3", someObject) 
Example("Five", "3", null) 
Example("Six", "3", someObject) 
Example("Seven", "4", someObject) 

我想是在第三场null"3"的第一个元素第二场。

在这个特定的情况下,它将是第一个字段中的"Five"的条目。

我该怎么做?什么是最好的功能方法呢?

回答

5

你可以使用List.collect方法与模式匹配:

list.collect{ case Example(x, "3", null) => x } 
// res1: List[String] = List(Five) 
+0

正是我想要的。谢谢。 –

+1

'find'或'collectFirst'在这种情况下会更有效率。 – Aivean

1
list.find(elem => elem._3 == null && elem._2 == "3") 

list.find { 
    case Example(_, "3", null) => true 
    case _ => false 
} 

第一方案是丑了一点,但如果你正在做的事情很简单/小它避免第二个(恕我直言)的额外代码