我在过滤Scala集合时遇到麻烦。任何帮助,将不胜感激。
我具有以下设置:
val groupByLetter = (A, List((2018-10-24,1.0), (2018-10-22,-2.1), (2018-10-10,5.1), (2018-11-22,2.2), (2018-11-10,24))}, (B, List((2018-10-24, 1.0), (2018-10-22,-2.1), (2018-10-10,5.1), (2018-11-22,2.2), (2018-11-10,30)))
val dates = List(2018-10-24, 2018-10-22, 2018-10-30)
期望的结果是这样:
(A, List((2018-10-24,1.0), (2018-10-22,-2.1)))
(B, List((2018-10-24,1.0), (2018-10-22,-2.1), (2018-11-10,30)))
我尝试了以下两个,以及无数其他:
val try1 = groupByLetter.filter(d => dates.contains(d._2.productIterator.foreach(s => s).toString))
val try2 = groupByLetter.filter(d => dates.contains(d._2.map(s => println(s._1)).toString))
注意:日期列表都是字符串。也内部元组中的groupByLetter的日期字段是DateTime,这就是为什么我必须。toString它们的原因。
期待对我的问题有任何帮助!谢谢!
import java.time.LocalDate
val groupByLetter :List[(String, List[(LocalDate, Double)])] =
List(("A", List((LocalDate.parse("2018-10-24"),1.0)
,(LocalDate.parse("2018-10-22"),-2.1)
,(LocalDate.parse("2018-10-10"),5.1)
,(LocalDate.parse("2018-11-22"),2.2)
,(LocalDate.parse("2018-11-10"),24.0)))
,("B", List((LocalDate.parse("2018-10-24"),1.0)
,(LocalDate.parse("2018-10-22"),-2.1)
,(LocalDate.parse("2018-10-10"),5.1)
,(LocalDate.parse("2018-11-22"),2.2)
,(LocalDate.parse("2018-11-10"),30.0))))
val dates = List("2018-10-24", "2018-10-22", "2018-10-30")
val filtered = groupByLetter.map{outerTpl =>
(outerTpl._1, outerTpl._2.filter(innerTpl => dates.contains(innerTpl._1.toString)))
}
//List((A,List((2018-10-24,1.0), (2018-10-22,-2.1)))
// , (B,List((2018-10-24,1.0), (2018-10-22,-2.1))))
我注意到A
和B
列表几乎完全相同。 (它们在过滤后的结果中是相同的。)提供测试数据以使判断结果是否正确更有意义吗?