如何从scala中的List中过滤元组中的第二个元素

时间:2017-12-13 11:50:46

标签: scala

我有一个包含元组中数据的List:(fileName,creationDate),可以在下面看到。

latestFiles: List[(java.io.File, String)] = List(
(222651.log,2017-12-13), 
(222301.log,2017-12-11), 
(222305.log,2017-12-13), 
(222303.log,2017-12-12), 
(222302.log,2017-12-13),

元组中的第二个元素表示文件的创建日期(第一个元素)。 我使用下面的代码以List的第二个元素的形式得到了日期。

val simpDate = new java.text.SimpleDateFormat("yyyy-MM-dd")
val currDate = simpDate.format(new java.util.Date())
val now = Instant.now                                               // Gets current date in the format: 2017-12-13T09:40:29.920Z
val today = now.toEpochMilli
val t = (x:Long) => { new SimpleDateFormat("yyyy-MM-dd").format(x)}
val todaySimpDate = t(today)                                        // Gets the date in the format: 2017-12-13

我需要通过List中的所有元素:latestFiles并获取具有'todaySimpDate'日期的元组。 我知道有'过滤器'和SubList选项可以做到这一点,但我无法想出正确的方法。我尝试了以下方式:

 val latefil = latestFiles.filter(y => (y._1,y._2==todaySimpDate))
 <console>:64: error: type mismatch;
 found   : (java.io.File, Boolean)
 required: Boolean
       val latefil = latestFiles.filter(y => (y._1,y._2==todaySimpDate))

我没有硬编码日期值,因为我将系统日期变为变量,然后使用它来比较值。 我知道我这样做的方式不对,但任何人都可以告诉我如何正确地从List中获取元素:包含元组中第二个元素的latestFiles到“todaySimpDate”中的值。

1 个答案:

答案 0 :(得分:2)

你的过滤器表达式需要返回一个bool,而不是一个元组

例如:

latestFiles.filter(y => y._2==todaySimpDate)

或:

latestFiles.filter(_._2 == todaySimpDate)