简单的用我的代码来说明一下这个表达式,如有错误请指出,非常感谢;
总结一下这个帖子
1)别人的例子,
2)自己写的例子,接口有参数,无参数,实现方法的参数情况说明
先看别人的例子
通过这个比较接口来实现一个lambda表达式,下面我自己写一个接口来实现说明多种情况。
package org.xxxx.demo01;
import java.util.Arrays;
import java.util.Comparator;
public class Demo01 {
public static void main(String[] args) {
// 定义字符串数组
String[] strArr = { "abc", "cd", "abce", "a" };
// 传统方法
// 匿名内部类
Arrays.sort(strArr, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return Integer.compare(s2.length(), s1.length());
}
});
// 输出排序结果
for (String s : strArr) {
System.out.println(s);
}
System.out.println("---------------------");
// Lambda表达式
Arrays.sort(strArr, (s1, s2) -> Integer.compare(s2.length(), s1.length()));
// 输出
for (String s : strArr) {
System.out.println(s);
}
}
我自己写的一个简单的demo
//先定义一个接口
public interface Test {
Integer ces(Integer s1,Integer s2);
}
随后是测试类
import javax.sound.midi.Soundbank;
import java.util.Arrays;
import java.util.Comparator;
public class LamdbaTest {
public static void main(String[] args) {
Integer integer= LamdbaTest.test(new Test() {
@Override
public Integer ces(Integer s1, Integer s2) {
return s1-s2;
}
});
System.out.println(integer);
//lambda表达式 //执行语句只有一行代码,可以直接写
Integer integer2 = LamdbaTest.test((s1,s2)->s1-s2);
//语句不止一行,那就写代码块
LamdbaTest.test((s1,s2)->{
System.out.println("你好呀");
return s1-s2;
});
System.out.println(integer2);
}
//实现带返回值的函数 不带外部参数
//写死内部参数
public static Integer test(Test ces){
return ces.ces(1,2);
}
}
输出结果
-1
你好呀
-1
可以看到,方法test里面带有接口参数,而这个接口的方法是需要被实现的
同样我们可以给这个方法加上其他的参数
例如test(int[] arr,Test ces)需要说明的是,外部参数会被当做final的 使用注意
然后根据你的需求具体实现
在来一个接口没有参数的
public interface Test {
void ces();
}
import javax.sound.midi.Soundbank;
import java.util.Arrays;
import java.util.Comparator;
public class LamdbaTest {
public static void main(String[] args) {
LamdbaTest.test(new Test() {
@Override
public void ces() {
System.out.println("你好呀");
}
});
LamdbaTest.test(()->{
System.out.println("我们好");
System.out.println("好个鸭儿");
});
}
//实现带返回值的函数 不带外部参数
//写死内部参数
public static void test(Test ces){
ces.ces();
}
}
执行结果
你好呀
我们好
好个鸭儿
诶,这个时候就有细心的读者问了,这样子到底有什么用呢
搬一下别人的话
通过上面的两个需求,发现Lamdba表达式很简单,那何时使用呢
需要显示创建函数式接口对象的地方,都可以使用
实际上函数式接口的转换是Lambda表达式唯一能做的事情
即lambda必须和Functional Interface配套使用
主要用于替换以前广泛使用的内部匿名类,各种回调
比如事件响应器、传入Thread类的Runnable等 ————————————————
这篇文档到此结束,慢慢来,后面在说用法
谢谢三连