一. 一个小案例
lambda表达式是jdk8以后出现的技术点,可以让程序员更方便的使用接口及方法实现,比如我们可以使用下面的代码,来调用一个接口中的方法:
public class Test {
public static void main(String[] args) {
A a = ()->{
System.out.println("方法的实现--");
};
a.m();
}
}
interface A {
void m();
}
我们会发现,上面的代码调用起来真的是非常的简单和方便。但在实际工作中,你真的理解如何使用lambda表达式吗,今天千锋老谢就来给你唠一唠Lambda表达式。
二. Lambda简介
lambda表达式一般只适用于一个接口中只有一个方法的接口形式,但这势必会影响我们在开发中的使用,不过别担心,lamda还给我们提供了另外四种应用型接口。
供给型接口
@FunctionalInterface
public interface Supplier{
/**
* Gets a result.
*
* @return a result
*/
T get();
}
消费型接口
@FunctionalInterface
public interface Consumer{
/**
* Performs this operation on the given argument.
*
* @param t the input argument
*/
void accept(T t);
}
断言型接口
@FunctionalInterface
public interface Predicate{
/**
* Evaluates this predicate on the given argument.
*
* @param t the input argument
* @return {@code true} if the input argument matches the predicate,
* otherwise {@code false}
*/
boolean test(T t);
}
函数型接口
@FunctionalInterface
public interface Function<t, r=""> {
/**
* Applies this function to the given argument.
*
* @param t the function argument
* @return the function result
*/
R apply(T t);
}
三. Lambda使用
使用方式1
如果我们想写一个方法,参数为一个1-100的随机数,一般可能会先写一个方法,然后再调用此方法,如下所示:
public int getNum() {
return (int) (Math.random()*100+1);
}
int num = getNum();
如果使用供给型接口,则上述代码就会变得更加方便,代码如下:
Suppliers = ()-> (int) (Math.random()*100+1);
Integer num = s.get();
这样就可以不用定义方法,就能达到之前的效果,而且代码的执行效率也会更高。
使用方法2
如果我们想要判断一个字符串中是否包含指定的字符,比如“ok”,一般会定义如下方法:
public boolean isContainOk(String str) {
return str.contains("ok");
}
这里如果我们使用断言型接口,可以直接定义如下:
Predicatep = (str)-> str.contains("ok");
boolean result = p.test("iamok");
使用方法3
如果我们想要在一个正数集合的参数中返回最大值,可以定义如下lambda表达式:
Function<int[], integer=""> f = (arr)-> {
Arrays.sort(arr);
return arr[0];
};
int max = f.apply(new int[]{1,3,2});
以上这些实例,都可以让我们摆脱对方法的定义,从而达到随用随实现的目的,简化了代码的定义,其实这才是lambda表达式的真正精髓所在。
相关文章
了解千锋动态
关注千锋教育服务号
扫一扫快速进入
千锋移动端页面
扫码匿名提建议
直达CEO信箱