我的输入文件如下。它包含每个客户的一些购买细节。在scala中我们如何找到每个客户的最新记录?
输入:
100,Surender,2015-01-23,PHONE,20000
100,Surender,2015-01-24,LAPTOP,25000
101,Ajay,2015-02-21,LAPTOP,40000
101,Ajay,2015-03-10,MUSIC_SYSTEM,50000
102,Vikram,2015-07-20,WATCH,60000
我的要求是我想找出每个客户的最新购买详情。
因此预期产量
预期输出:
List(101,Ajay,2015-03-10,MUSIC_SYSTEM,50000)
List(100,Surender,2015-01-24,LAPTOP,25000)
List(102,Vikram,2015-07-20,WATCH,60000)
我尝试下面的代码,它是给我预期的输出..
但这以下逻辑有点类似于java。
我的Scala代码:
package pack1
import scala.io.Source
import scala.collection.mutable.ListBuffer
object LatestObj {
def main(args:Array[String])=
{
var maxDate ="0001-01-01"
var actualData:List[String] =List()
var resultData:ListBuffer[String] = ListBuffer()
val myList=Source.fromFile("D:\\Scala_inputfiles\\records.txt").getLines().toList;
val myGrped = myList.groupBy { x => x.substring(0,3) }
//println(myGrped)
for(mappedIterator <- myGrped)
{
// println(mappedIterator._2)
actualData =mappedIterator._2
maxDate=findMaxDate(actualData)
println(actualData.filter { x => x.contains(maxDate) })
}
}
def findMaxDate(mytempList:List[String]):String =
{
var maxDate ="0001-01-01"
for(m <- mytempList)
{
var transDate= m.split(",")(2)
if(transDate > maxDate)
{
maxDate =transDate
}
}
return maxDate
}
}
能有人帮我试图用一阶简单的方法相同的方法呢?
或上述代码是实现该逻辑的唯一方法?
“上面的代码是实现该逻辑的唯一方法吗?”不,您正在编写Java-in-Scala。看看集合API(也可能是Scala中的一个教程)。 http://scala-lang.org/api/current/#package虽然你找到了'filter',所以它有点奇怪,你没有注意到'max'和'maxBy' .. –