当前位置: 首页 > news >正文

Scala 柯里化、sortBy方法

Scala高级特性

小白的Scala学习笔记 2024/5/30 8:42

文章目录

  • Scala高级特性
    • 柯里化
      • sortBy方法

柯里化

参数可以写在两个括号里面

object TestKeli {def add(a:Int)(b:Int)=a+bdef main(args: Array[String]): Unit = {val res = add(22)(33)println(res)}
}

可以填隐式参数,传一个默认值,调用的时候只需要传一个参数

object TestKeli {implicit val c:Int=3//b给个默认值,调用的时候不需要传递,把参数变成隐式参数//当我们使用柯里化后,如果有参数是隐式的话,那么,Scala会自动上下文搜索对应的变量def add(a:Int)(implicit b:Int)=a+bdef main(args: Array[String]): Unit = {val res = add(22)println(res)}
}

sortBy方法

这个方法会生成一个排序好的List(这里是按sage升序排序的),不改变原List的顺序

sortBy方法,需要的Ordering类型的隐式参数

Ordering对象,能指导两个变量的大小

用隐式参数实现

object TestSortBy {//Ordering对象,能指导两个变量的大小,通过下面的方法做减法,就能判断谁大谁小implicit val ord=new Ordering[Stu]()//sortBy方法,需要的Ordering类型的隐式参数{override def compare(x:Stu,y:Stu): Int =x.sage-y.sage//这里如果改成y.sage-x.sage,就能实现降序排序}case class Stu(snams:String,ssex:String,sage:Int)def main(args: Array[String]): Unit = {val list=List(Stu("zhangsan1","nan",21),Stu("zhangsan2","nan",22),Stu("zhangsan3","nan",29),Stu("zhangsan4","nan",12))//这个方法会生成一个排序好的List(这里是按sage升序排序的),不改变原List的顺序val res = list.sortBy(x => x)//sortBy 方法使用了柯里化,需要一个Ordering的隐式参数println(res)}
}

用隐式转换实现

object TestSortBy {//用隐式转换实现implicit def toStu(stu: Stu)=new Ordered[Stu]() {override def compare(that: Stu): Int = that.sage-stu.sage}case class Stu(snams:String,ssex:String,sage:Int)def main(args: Array[String]): Unit = {val list=List(Stu("zhangsan1","nan",21),Stu("zhangsan2","nan",22),Stu("zhangsan3","nan",29),Stu("zhangsan4","nan",12))//这个方法会生成一个排序好的List(这里是按sage升序排序的),不改变原List的顺序val res = list.sortBy(x => x)//sortBy 方法使用了柯里化,需要一个Ordering的隐式参数println(res)}
}

相关文章:

  • Linux配置java,maven,marshalsec环境
  • 实现Dropdown下拉菜单监听键盘上下键选中功能-React
  • vue3状态管理,pinia的使用
  • JavaScript、Kotlin、Flutter可以开发鸿蒙APP吗?
  • HTTP --tcp和keep-alive
  • oracle linux7安装oracle11g0204
  • 强化学习(一) 基本概念和赌博机问题
  • 【量算分析工具-获取高程】GeoServer改造Springboot番外系列八
  • 应用案例|精密制造中使用复合机器人得到显著提升
  • MySQL表的增删改查初阶(上篇)
  • Kubernetes集群Pod控制器
  • 解析Java中1000个常用类:ProcessHandle.Info类,你学会了吗?
  • 执行shell脚本时为什么要写成./test.sh,而不是test.sh?
  • 数据结构--关键路径
  • MYSQL之主从复制
  • android图片蒙层
  • Bytom交易说明(账户管理模式)
  • classpath对获取配置文件的影响
  • co.js - 让异步代码同步化
  • CSS盒模型深入
  • express + mock 让前后台并行开发
  • gops —— Go 程序诊断分析工具
  • Java 23种设计模式 之单例模式 7种实现方式
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • Node 版本管理
  • Odoo domain写法及运用
  • Sass Day-01
  • Vue2.x学习三:事件处理生命周期钩子
  • vue-loader 源码解析系列之 selector
  • 从零开始的无人驾驶 1
  • 大主子表关联的性能优化方法
  • 分类模型——Logistics Regression
  • 欢迎参加第二届中国游戏开发者大会
  • 近期前端发展计划
  • 离散点最小(凸)包围边界查找
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 我从编程教室毕业
  • 我建了一个叫Hello World的项目
  • 小程序 setData 学问多
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 国内开源镜像站点
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​学习笔记——动态路由——IS-IS中间系统到中间系统(报文/TLV)​
  • # centos7下FFmpeg环境部署记录
  • # Spring Cloud Alibaba Nacos_配置中心与服务发现(四)
  • # 透过事物看本质的能力怎么培养?
  • (2020)Java后端开发----(面试题和笔试题)
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (AngularJS)Angular 控制器之间通信初探
  • (arch)linux 转换文件编码格式
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (笔记)M1使用hombrew安装qemu
  • (二十三)Flask之高频面试点
  • (每日持续更新)jdk api之FileFilter基础、应用、实战