比较器&函数接口

一、比较器

1、比较器的作用: 可以通过自定义指定比较 规则,比较引用数据类型的数据

2、使用方法:

Arrays.sort() 对 数组中的多个数据进行升序排序

当对自定义引用数据类型数组排序的时候,通过两种方式实现:

要求数据需要实现: 内部比较器|外部比较器

​ 1.Comparable 内部比较器|自然排序|默认排序规则

​ 2.使用类去实现Comparable接口,重写内部的compareTo方法,方法中自定义比较规则

缺点:与类的耦合度太高,不便于后期维护

推荐使用自定义比较器|自定义排序

实现Comparator接口,重写compare方法,方法内部自定义比较规则

二、java8新特性

  1. 为什么要学Java8
    1.1. 简介
    优点:速度更快(底层的数据结构做了一些更新和改动,垃圾回收机制内存结构做了一些改动)
    代码更少(增加了新的语法Lambda表达式)
    强大的StreamAPI
    便于并行
    最大化减少空指针异常(Optional容器类)
    1.2. 主要内容
    1、Lambda表达式
    2、函数式接口
    3、方法引用与构造器引用

  2. Lambda表达式
    2.1. 什么是Lambda表达式?
    Lambda表达式是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使得Java语言表达能力得到了提升。
    Java8中引入了一个新的操作符” -> ”该操作符称为箭头操作符或Lambda操作符,箭头操作符将Lambda表达式拆分为两部分:
    左侧:Lambda表达式的参数列表。对应接口中抽象方法的参数列表。
    右侧:Lambda表达式中所需要执行的功能,即Lambda体。对应接口中抽象方法的实现。
    2.2. Lambda表达式的基础语法
    2.2.1. 无参数,无返回值
    要求存在一个接口,接口中存在一个方法,方法无参无返回值即可。
    栗子
    2.2.2. 有一个参数,无返回值
    要求存在一个接口,接口中存在一个方法,方法带一个参数无返回值即可。
    一个参数时小括号可以省略
    2.2.3. 有参数有返回值
    要求存在一个接口,接口中存在一个方法,方法带参数带返回值即可。
    若Lambda体中只有一条语句,return和大括号都可以省略不写
    2.3. 说明
    Lambda表达式的参数列表的数据类型可以省略不写,因为JVM编译器通过上下文推断出数据类型,即“类型推断”。

三、 函数式接口

3.1. 什么是函数式接口?
接口中只有一个抽象方法的接口,称为函数式接口。default修饰方法只能在接口中使用(只能被实现了这个接口的对象调用),在接口种被default标记的方法为普通方法,可以直接写方法体。
可以使用注解@FunctionalInterface修饰,可以检查是否是函数式接口。
Lambda表达式需要函数式接口的支持
3.2. 使用函数式接口

@FunctionalInterface 
public interface MyFunction<T> {
	public T getValue(T o); 
	}
	
// 需求:对一个数进行运算
@Test 
public void test7() { 
	Integer result = operation(100, (x) -> x * x); 
	System.out.println(result);
    
	result = operation(200, (y) -> y - 100); 
	System.out.println(result); 
	}
public Integer operation(Integer num, MyFunction<Integer> mf) { 
	return mf.getValue(num); 
}

3.3. 四大内置核心函数式接口
消费型、供给型、函数型、断定型
消费型接口 Comsumer
void accept(T t)
供给型接口 Supplier
T get()
函数型接口 Function<T,R>
R apply(T t)
断定型接口 Predicate
boolean test(T t)
消费性:只进不出
供给型:白手起家,空手套白狼
函数型:礼尚往来
断定行:鉴定评审

四、常用类

  1. 字符串相关类
    1)String
    不可变的字符序列
    2)StringBuffer
    可变字符序列,并且线程安全,但是效率低
    3)StringBuilder
    可变字符序列,线程 不安全,但是效率高 (一般用他!)
    1.1. String
    由于使用特别多,所以有特殊快捷的创建方式通过双引号 “” 直接创建对象
    1.1.1. 构造方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g10pSJ5f-1585613297232)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1585566575309.png)]

1.1.2. 常用方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5CBP8RYO-1585613297236)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1585566653521.png)]

还有 valueOf()系列,可以将基本类型的数据转为字符串,当然一般不用这么麻烦
字符串分割 split()
1.2. StringBuffer和StringBuilder
这两个类使用方式类似。一般用于做字符串拼接,删除,替换,反转,截取,插入等。
通过查看源码,认识StringBuffer和StringBuilder的构造方式,以及与String的转换方式

  1. 包装类
    JAVA并不是纯面向对象的语言。Java语言是一个面向对象的语言,但是Java中的基本数据类型却是
    不面向对象的。但是我们在实际使用中经常需要将基本数据转化成对象,便于操作。比如:集合的操作
    中。例如使用Map对象要操作put()方法时,需要传入的参数是对象而不是基本数据类型。为了解决这个
    不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的
    类统称为包装类(Wrapper Class)。包装类均位于java.lang包
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BiaZcgQx-1585613297239)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1585566773051.png)]
    在这八个类名中,除了Integer和Character类以后,其它六个类的类名和基本数据类型一直,只是类名
    的第一个字母大写即可。
    对于包装类说,这些类的用途主要包含两种:
    a、作为和基本数据类型对应的类类型存在,方便涉及到对象的操作。
    b、包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法(这些操作方法的作
    用是在基本类型数据、包装类对象、字符串之间提供转化!)。
    这些类的用途主要包含两种:
    a、作为和基本数据类型对应的类类型存在,方便涉及到对象的操作。
    b、包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法(这些操作方法的作
    用是在基本类型数据、包装类对象、字符串之间提供转化!)。
    包装类和基本类型之间存在自动装箱和自动拆箱操作,所以可以互相方便地切换。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值