使用第二个列表作为键过滤Scala元组列表(在一个元组中)

问题描述 投票:0回答:1

我在过滤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它们的原因。

期待对我的问题有任何帮助!谢谢!

java scala dictionary filter tuples
1个回答
0
投票
我不得不付出很多额外的工作,试图弄清您的问题。如果我做错了,那你只能怪自己。

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))))

我注意到AB列表几乎完全相同。 (它们在过滤后的结果中是相同的。)提供测试数据以使判断结果是否正确更有意义吗?
© www.soinside.com 2019 - 2024. All rights reserved.