scala - 在scala中我们如何找到每个客户的最新记录?

标签 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
  }

   }

有人可以帮助我使用 scala 以更简单的方式尝试相同的方法吗?

或者上面的代码是实现该逻辑的唯一方法?

最佳答案

甚至更简单的版本,也使用了巧合相同名称的案例类。不过,不会删除像 Tzach 那样的不良记录,并且我将所有内容保留为字符串。

case class Record(id: String, name: String, dateString: String, item: String, count: String)
  myList.map { line =>
    val Array(id, name, dateString, item, count) = line.split(",")
    Record(id, name, dateString, item, count)
  }
  .groupBy(_.id)
  .map(_._2.maxBy(_.dateString))
  .toList  

关于scala - 在scala中我们如何找到每个客户的最新记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38895984/

相关文章:

Scala 3 枚举方法覆盖

scala - 使用泛型强制 Scala 特征的类型

javascript - 将已排序的集合合并到新的已排序集合中的最有效方法?

scala - 从客户端发送的数据创建枚举器

scala - 使用带有 LabelledGenerics 的无形状标签

xml - Scala 解析器组合器解析 xml?

scala - 如何解决 java.lang.NumberFormatException : null 问题

scala - 如何在对象上调用 '!=' 方法?

scala - 提升 - 将值列表绑定(bind)到模板

scala - 使用Slick 3进行insertOrUpdate