我在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-11-10)预期的结果是:
(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's date字段是DateTime,这就是为什么我必须.toString它们的原因。
期待有任何帮助解决我的问题!谢谢!
发布于 2019-11-20 00:35:05
为了理解你的问题,我不得不做了很多额外的工作。如果我搞错了,那你只能怪自己了。
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列表几乎完全相同。(它们在过滤结果中是相同的。)提供测试数据使判断结果是否正确不是更有意义吗?
https://stackoverflow.com/questions/58943860
复制相似问题