Lambda表达式、正则表达式

系列文章目录

lambda表达式的写法、一些函数式接口,正则表达式的写法与用

一、Lambda表达式

Lambda表达式就是匿名内部类的简写,但是有一个条件,实现的这个接口必须是函数式接口。

Lambda表达式,可以用来表示一个函数,它只关注函数的参数列表, 函数主体、返回类型,并且可以将此函数作为一个参数,进行传递。

1.Lambda表达式语法

()->{ }

():表示参数列表

->:后面跟的是函数主体

 { }:函数主体,表达式的返回值,有这个函数主体中代码来决定

2.注意事项

当方法体只有一行代码,大括号可以省略。

当只有一行return语句,return也能省略。

参数列表的数据类型也可以省略。

Lambda表达式中的参数列表,里面的参数可以不写类型,因为 JVM在运行时会自动推断,当然,如果直接手动写上去,也完全没有问题

3.重载解析

如果出现了方法重载,参数列表中的接口实现类不同,可以使用强转

但是通常情况下不出现这种情况,一般名字重写一个要避免这个问题

二、函数式接口

有且只有一个抽象方法的接口叫做函数式接口,可以使用注解@FunctionalInterface来进行判断是否为一个函数式接口。

常用接口:

Predicate、Consumer、Function、Supplier、UnaryOperator和BinaryOperator等等。

Predicate:

Predicate<T>接口定义了一个test方法,传入一个任意类型,返回一个布尔值

@FunctionalInterface
public interface Predicate < T > {
        boolean test ( T t );
}

 这个方法通常用来过滤,进行判断

Predicate中还有其他方法:and(),or(),negate()

JDK'1.8之后给 Collection 集合增加了默认方法: removeIf

Consumer:

Consumer<T>接口定义了一个accept方法,传入一个任意类型,没有返回值,相当于是消费者

@FunctionalInterface
public interface Consumer < T > {
        void accept ( T t );
default Consumer < T > andThen ( Consumer <? super T > after ) {
                Objects . requireNonNull ( after );
                return ( T t ) -> { accept ( t ); after . accept ( t ); };
        }
}

 JDK1.8中,给Collection集合增加了默认方法: forEach 用来遍历集合

Supplier:

 Supplier<T>接口定义了一个get方法,不传入参数,返回一个任意类型,相当于生产者。

@FunctionalInterface
public interface Supplier < T > {
        T get ();
}

Function:

 Function<T,R>接口定义了一个apply方法,传入一个任意类型,返回一个任意类型

@FunctionalInterface
public interface Function < T , R > {
        R apply ( T t );
default < V > Function < V , R > compose ( Function <? super V , ? extends T > before ) {
        Objects . requireNonNull ( before );
        return ( V v ) -> apply ( before . apply ( v ));
}
default < V > Function < T , V > andThen ( Function <? super R , ? extends V > after ) {
        Objects . requireNonNull ( after );
        return ( T t ) -> after . apply ( apply ( t ));
}
static < T > Function < T , T > identity () {
                return t -> t ;
        }
}

andThen方法:a.andThen(b),a的结果当成b的参数

compose方法是, 先执行传进来的,在执行外面的。a.compose(b),b的结果作为a的参数。

JDK1.8中,对于Map接口中新增了默认方法: computeIfAbsent ,用来在 指定key不存在时,计算一个value值和指定key匹配,并将该key=value写入 map中。

对于基本数据类型:

对于基本数据类型来说,会进行大量的拆箱装箱,比较消耗性能,JDK1.8之后提供了基本数据类型的函数接口。例如DoublePredicate 、 IntConsumer 、 LongBinaryOperator 、 IntFunction 等。 其中, Function 接口还有针对输出参数类型的变种: ToIntFunction<T> 、 IntToDoubleFunction 等

三、正则表达式

1.作用

作用1:校验字符串是否满足规则

作用2:在一段文本当中查找满足要求的内容

2.规则

字符类:(只能匹配一个字符)
[abc]:只能是a,b,c
[^abc]:除了a,b,c之外的任何字符
[a-zA-Z]:a-z A-Z,包括(头尾范围)相当于闭着的
[a-d[m-p]]:a-d或者m-p
[a-z&&[def]]:a-z和def的交集。为d,e,f
[a-z&&[^bc]]:a-z和非bc的交集。
[a-z&&[^m-p]]:a到z和除了m-p的交集。


预定义字符(只匹配一个字符)
. (点)  :任何字符
\d:一个数字 :【0-9】
\D:非数字:[^0-9]
\s:一个空白字符:[\t\n\x0B\f\r]
\S:非空白字符:[^\s]
\w:[a-zA-Z_0-9]英文、数字、下划线
\W:[^\w]:一个非单词字符


这里需要用到转义字符(\)
转义字符就是改变后面原本的含义。把后面的变为普普通通的东西

简单来记:两个\表示一个\
第一个\为转义字符,把后面原本转义的\改为了普普通通的 \


数量词:
这里的X代表任意内容,其实就是上面那些字符和预定义字符
X?: X,一次或0次
X*:   X,零次或多次
X+:  X,一次或多次
X{n}:X,正好n次
X{n,} X,至少n次
X{n,m} :X,至少n次但不超过m次

3.Java中使用

Java中字符串有一个方法叫做matches方法,将正则表达式传参传入就可以进行判断。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值