scala List immutable.Map[String,Any]]的排序问题

scala List immutable.Map[String,Any]]的排序问题

帮同事处理List[scala.collection.immutable.Map[String,Any]]的排序问题

原来想的办法是

var x = mylist.sortWith(_.get("commonCount").toString > _.get("commonCount").toString)

_.get("commonCount")可以取出值,但类型是 Some,要用_.get("commonCount").get 来获取真实类型

scala> println(mylist.map(_.get("commonCount").get.getClass))
List(class java.lang.Integer, class java.lang.Integer, class java.lang.Integer, class java.lang.Integer, class java.lang.Integer)

知道真实的数据类型,但在实际使用时要转换成基本类型.asInstanceOf[Int],进行判断

mylist.sortWith((x, y) => x.get("commonCount").get.asInstanceOf[Int] < y.get("commonCount").get.asInstanceOf[Int]))

另一种方法:

mylist.sortWith(_.get("commonCount").get.asInstanceOf[Int] < _.get("commonCount").get.asInstanceOf[Int])

源码:

import scala.collection.immutable.{HashMap, List}

/**
  * Created by 185378641@qq.com on 2017/12/7. 
  *
  * @author jiangtao
  *
  * 		[
  * 		{
  * 		"treatmentMoney": 0,
  * 		"hospital": "湖南中医学院第二附属医院湖南省中医院",
  * 		"commonCount": 2,
  * 		"department": "主治医师",
  * 		"departmentFunction": "a19ec1789ab711e7a9ff408d5c916e3f",
  * 		"docId": "3291ba79901e42bfb756745fb803df64",
  * 		"joinedClinic": [
  * 		"马冬梅--陈小春"
  * 		],
  * 		"docName": "马冬梅--陈小春--张三"
  * 		},
  * 		{
  * 		"treatmentMoney": 0,
  * 		"hospital": "湖南中医学院第二附属医院湖南省中医院",
  * 		"commonCount": 1,
  * 		"department": "主治医师",
  * 		"departmentFunction": "a19ec1789ab711e7a9ff408d5c916e3f",
  * 		"docId": "1ec9303c79df48d9988bd7bce4370c0e",
  * 		"joinedClinic": [
  * 		"马冬梅--陈小春--张三",
  * 		"小二"
  * 		],
  * 		"docName": "麻子"
  * 		}
  * 		]
  */

object Main extends App {
  println("hello world")
  //
  //  val days = List(
  //    "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
  //  )

  var one = Map(
	"docName" -> "马冬梅",
	"commonCount" -> 11
  )
  var two = Map(
	"docName" -> "麻子",
	"commonCount" -> 23
  )
  var three = Map(
	"docName" -> "麻子",
	"commonCount" -> 3
  )
  var four = Map(
	"docName" -> "麻子",
	"commonCount" -> 19
  )
  var five = Map(
	"docName" -> "麻子",
	"commonCount" -> 5
  )

  var mylist = List(one, two, three, four, five)

  println(mylist.sortWith((x, y) => x.get("commonCount").get.asInstanceOf[Int] > y.get("commonCount").get.asInstanceOf[Int]))
  println(mylist.sortWith((x, y) => x.get("commonCount").get.asInstanceOf[Int] < y.get("commonCount").get.asInstanceOf[Int]))

  //  println(mylist.sortWith((x,y) => x.get("commonCount"))
  //  mylist.toList.foreach(i => println(i.get("commonCount").getClass))
//
//  var x = Map(
//    "a" -> 1,
//    "b" -> "b"
//  )
//  var y = Map(
//    "a" -> 11,
//    "b" -> "b"
//  )
//  var z = Map(
//    "a" -> 3,
//    "b" -> "b"
//  )

//  println(x.get("a").get.getClass)
//  println(y.get("a").get.getClass)
//  println(z)
//
//  var xyz = List(x, y, z)

  //  println(xyz.sortBy(_.get("a").get))


  /*
	* test
	*/

  //  print(mylist.sorted)
  //      print(mylist.flatMap(i => i.get("commonCount")).sortBy(_))
  //      print(mylist.map(i => i.get("commonCount")).sortWith((x,y) => x > y ))
  //    print(mylist.map(i => i.get("commonCount")).sortWith(_.toString > _.toString))
  //    print(mylist.sortBy(i =>(i.get("commonCount"))))
  //    print(mylist.sortBy(_.get("commonCount")))
  //      print(mylist.map(_.foreach(println)))
  //    print(mylist.map(_.get("commonCount")).foreach(println))
  //  print(mylist.sortWith(_.get("commonCount").toString > _.get("commonCount").toString))
  //  println(mylist.sortWith(_.get("commonCount").toString < _.get("commonCount").toString))
  //  println(mylist.sortBy(_.get("commonCount").toString))
  //    println(mylist.sortBy(_.values))
  //  println(mylist.sorted(Ordering.Int.reverse))
  //  println(mylist.sortBy(_.get("commonCount")))
  //  println(mylist.groupBy(_.get("commonCount")))
  //  println(mylist.sortWith(_.foreach(println(_._2))))
  //  println(mylist.map(_.mapValues()))
  //  println(mylist.sortBy(i => i.get("commonCount").toString ))
  //  println(mylist.sortBy(i => (x = i.get("commonCount"),y=i.get("commonCount") )=>
  //  println(mylist.sortWith((x,y)=>x.get("commonCount").toString > y.get("commonCount").toString))
  //    println(mylist.sortWith((x, y) => x.get("commonCount").toString.compareTo(y.get("commonCount").toString)<0))
  //  println(mylist.sortWith((x, y) => x.get("commonCount").toString.compare(y.get("commonCount").toString) < 0))
  //  println(mylist.sortWith(_.get("commonCount") < _.get("commonCount")))

  //  println(mylist.sortBy(_.get("commonCount").foreach(println)))
  //  println(mylist.sortWith(_.get("commonCount").toString >  _.get("commonCount").toString))
  //  println(mylist.sortWith((x, y) => x.get("commonCount").toString < y.get("commonCount").toString))
  //  println(mylist.sorted((x, y) => x.get("commonCount").toString.compareTo(y.get("commonCount").toString)))
  //    println(mylist.sortBy(i => (i.get("commonCount").toString.charAt(0),i.get("commonCount").toString.charAt(1))))
  //    print(mylist.sortBy(_.get("commonCount")))
  //  print(mylist.map(_.get("commonCount") < _.get("commonCount")): _*))
  //  print(mylist.sortBy(i => i.get("commonCount")))
  //  print(mylist.map(_.get("commonCount")).sortBy{_}:_*)
  //  print(mylist.sortWith(_.get("commonCount") > ).toSeq)
  //  var v = mylist.groupBy(_.get("commonCount"))
  //  println(v.keys.toList.foreach(println(_)))


  //    println(v.take(1).foreach(println))


  //  val newMap = mylist.sortBy().foldLeft(new ListMap[String, String]) {
  //    (map, key) => map + (key._1 -> key._2)

  // is ok
  //  var a = Item("马冬梅", 2, "主任")
  //  var b = Item("麻子", 9, "主任")
  //  var c = Item("麻子", 11, "主任")
  //  var d = Item("麻子", 5, "主任")
  //
  //  var mylist = List(a, b, c, d)
  //  println(mylist.sortWith((x,y) => x.commonCount.compare(y.commonCount)>0))
  //  println(mylist.sortBy(i => i.commonCount))


  //  var mymap = List(a,b,c,d).sortBy()
  //  print(mymap)
  //    var mylist =Map(one.get("commonCount")->one,two.get("commonCount")->two,three.get("commonCount")->three).toList.sortBy{_._2}:_*
  //  var mylist = listMap(Map(one->one.get("commonCount"),two.toString()->two.get("commonCount"),three.toString()->three.get("commonCount")).toList.sortBy{_._2}:_*)
  //  var listMap = ListMap(Map("foo"->3, "raise"->1, "the"->2, "bar"->4,"bar1"->4).toList.sortBy{_._2}:_*)


}


case class Item(docName: String, commonCount: Int, departmentName: String)


//
//class Doctor {
//
//  object docId
//
//  object getRealName
//
//  object getDepartmentName
//
//  object getDepartmentFunctionId
//
//  object getHospitalName
//
  var getTreatmentMoney
//
//  var commonCount:String
//
//  override def toString = commonCount
//
//}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/100410.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • qt 气泡聊天界面_微信聊天气泡框素材

    qt 气泡聊天界面_微信聊天气泡框素材目录由于最近的项目需要,做了些相关IM的工作。所以聊天框也是必不可少的一部分。聊天框的制作分很多种,本文以QListWidget+QPainter绘制的Item做了一个Demo。该Demo只是做一个示例,代码已公布如下,需要的拿去!目录效果图实现原理调用样例实现类代码分享效果图实现原理气泡式聊天的显示是由QListWidget作为控件,每个…

    2022年5月3日
    55
  • reaver使用相关[通俗易懂]

    reaver使用相关[通俗易懂](非TP-LINK路由推荐–d9–t9参数防止路由僵死reaver-imon0-bMAC-a-S–d9–t9-vv)小结-学习时应因状况调整参数(-c后面都已目标频道为1作为例子)目标信号非常好: reaver -i mon0 -bMAC -a -S -vv -d0 -c1目标信号普通: reaver -i mon0 -bMAC

    2022年5月4日
    109
  • fedora14安装教程_fedora安装中文

    fedora14安装教程_fedora安装中文 Dropbox是非常好用到文件备份与同步工具,而且已经从以前的只支持Windows到现在的多系统支持,但是在Fedora下Dropbox只提供对Fedora10的RPM安装包,这让使用最新版本的Fedora的人来说是非常不爽的。今天我们就通过下载Dropbox的源码在Fedora12上通过编译安装来使用。#1首先在Dropbox官方网站上下载程序的源码。源码下载页

    2022年9月20日
    4
  • ArrayList扩容过程

    ArrayList扩容过程#ArrayList动态扩容的全过程。如果通过无参构造的话,初始数组容量为0,当真正对数组进行添加时,才真正分配容量。每次按照1.5倍(位运算)的比率通过copeOf的方式扩容。在JKD1.6中实现是,如果通过无参构造的话,初始数组容量为10,每次通过copeOf的方式扩容后容量为原来的1.5倍例如:数组长度为10,有20个数据要添加,在第10个添加完之后,添加第11个数时,数组扩容为15(…

    2022年5月8日
    45
  • 最常用的前端开发工具(js开发工具哪个好)

    随着时间的流逝,科学的进步,我们前端也从最开始的网页设计走到了现在的界面设计。现在给大家介绍几款目前市面上最好用的前端开发工具。1、SublimeText3下载地址:https://www.sublimetext.com/功能介绍:这是一款轻量化的软件,适用于Windows、macOS和Linux。由自定义组件构建,支持多种编程语言、及语法高亮引擎,拥有优秀的代码自动完成功能。适合编程初学者使用。2、VisualstudioCode下载地址:https://code.visual

    2022年4月18日
    125
  • vue beforeEach 跳转问题

    vue beforeEach 跳转问题我们直接在beforeEach函数里面判断用户是否登录然后跳转页面的时候会陷入一个死循环解决办法就是多加一层if判断首先判断用户是否有token或者时候登录然后再判断to参数里的path路径if(Lkcommon.getToken()){next()}else{if(to.path!==”/login”){next({path:”/lo…

    2022年6月29日
    59

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号