Java Lambda表达式和Junit
1. Lambda表达式
1. 1 Lambda表达式: JDK1.8 函数式编程思想
Lambda 表达式是一种匿名函数(对 Java 而言这并不完全正确,但现在姑且这么认为),简单地说,它是没有声明的方法,也即没有访问修饰符、返回值声明和名字。
你可以将其想做一种速记,在你需要使用某个方法的地方写上它。当某个方法只使用一次,而且定义很简短,使用这种速记替代之尤其有效,这样,你就不必在类中费力写声明与方法了。
1.2 使用Lambda前提:
- 1.实现一个接口
- 2.接口中只有一个抽象方法
- 3.接口对象是作为方法参数使用的
1.3 Lambda表达式的使用方式
(参数列表) -> {一些代码}
(参数列表): 表示要重写的抽象方法的参数列表
-> : 固定语法, 指向/传递的意思
{一些代码}: 要重写的方法体
1.4 Lambda 取代匿名内部类
匿名内部类: 本质还是类, 编译后也会生成字节码文件, 运行时也要加载
Lambda: 本质是一个函数, 编译后不会有字节码文件, 直接从内存中获取,效率更高
1.5 Lambda省略的要点
可推导即可省略:
1.() 中的参数类型, 可以省略, 如果有多个参数, 每个参数类型都要一起省略
2.{} 中如果只有一行代码, 不论这个方法有没有返回值, 那么[{} return ;] 可以省略
[{} return ; ]必须一起省略
3.() 中如果只有一个参数, () 可以省略, 和类型一起省略
() 中如果没有参数, 必须写 ()
1.6 Lambda表达式的演示代码:
public class DemoThread {
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("哈哈哈哈哈哈");
}
}).start();
new Thread(() -> System.out.println("哈哈哈哈哈哈")).start();
}
}
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class DemoSort {
public static void main(String[] args) {
List<String> list = List.of("a", "ab!", "aa");
list = new ArrayList<>(list);
Collections.sort(list, (String o1, String o2) -> {
return o1.length() - o2.length();
});
Collections.sort(list, (o1, o2) -> o1.length() - o2.length());
System.out.println(list);
}
}
public class DemoMyInterface2 {
public static void main(String[] args) {
method1(new MyInterface2() {
@Override
public String echo(String str) {
return str;
}
}, "hello");
method1(str -> str, "hello");
}
//必须要有一个以接口对象为参数的方法
public static String method1(MyInterface2 in, String str) {
return in.echo(str);
}
}
2. JUnit(单元测试)
JUnit使用步骤:
1.在工程中创建一个文件夹lib
2.将2个jar包复制到lib中
3.选择jar包 右键 -> Add as Library... 默认添加即可
4.写一个测试类, 在其中写一个方法[不需要返回值,不需要参数]
5.在方法上添加注解 @Test
6.运行这个方法即可
JUnit常用注解:
@Test: 测试的方法, 可以直接运行
@Before: 在测试方法之前调用的
@After: 在测试方法之后调用的
@FunctionalInterface:注解
@Override:检测方法是不是重写
@SuppressWarnings:压制警告
@Deprecated:标记一个类或者方法或者变量, 过时的
@FunctionalInterface:检测一个接口是不是函数式接口
演示代码
import org.junit.*;
public class Demo0001 {
@Before
public void m1() {
System.out.println("?");
}
@Test
public void m2() {
System.out.println("哈哈哈!");
}
@After
public void m3() {
System.out.println("哈哈哈!!!!!");
}
}
3. 可变长参数
取代了数组 int[] arr -> int… arr。JDK1.5后, 修改为可变长参数
使用方法:
public class Demo01 {
public static void main(String[] args) {
sum(1, 2, 3, 4, 5, 1, 2, 1, 3, 32);
}
public static void sum(int... a) {
int sum = 0;
for (int i = 0; i < a.length; i++) {
sum += a[i];
}
System.out.println(sum);
}
}
注意:
- 1.方法中, 除了可变长参数, 还有别的参数, 可变长参数必须放在参数列表最后
- 2.而且一个方法中, 只能有一个可变长参数