:: 中被叫做 方法引用 可以进一步简化lambda的用法。
类名::静态方法
public class Task {
public static void main(String[] args) {
String[] arr={"aaaa", "bbbb", "cccc"};
List<String> stringList = Arrays.asList(arr);
//引用静态方法 类名::静态方法名
stringList.forEach(Task::print);
}
public static void print(String str){
System.out.println(str);
}
}
上面的代码和下面的lambda表达的意思一样
public class Task {
public static void main(String[] args) {
String[] arr={"aaaa", "bbbb", "cccc"};
List<String> stringList = Arrays.asList(arr);
//如下的lambda一样
stringList.forEach((s -> Task.print(s)));
}
public static void print(String str){
System.out.println(str);
}
}
执行的结果都一样
对象名::实例方法
public class Task {
public static void main(String[] args) {
String[] arr={"aaaa", "bbbb", "cccc"};
List<String> stringList = Arrays.asList(arr);
//引用实例方法 对象::方法名
Task task = new Task();
stringList.forEach(task::print);
}
public void print(String str){
System.out.println(str);
}
}
类名::实例方法
public class Task {
public static void main(String[] args) {
String[] name={"baby","jack","Mack","Andy","Test"};
//引用实例方法 类名::实例方法
Arrays.sort(name,String::compareToIgnoreCase);
System.out.println(Arrays.toString(name));
}
}
类名::new
@FunctionalInterface
interface CreateStudent{
Student creatStudent(String name,int age);
}
public class Task {
public static void main(String[] args) {
//匿名内部类的方式
test(new CreateStudent() {
@Override
public Student creatStudent(String name, int age) {
return new Student(name,age);
}
});
//使用lambda
test(((name, age) -> new Student(name,age)));
//这个是将lambda进行精简
//引用构造方法 实体类::new
test(Student::new);
}
public static void test(CreateStudent createStudent){
Student test = createStudent.creatStudent("test", 12);
System.out.println(test);
}
}
上面三种方法执行效果都是一样的,从上往下精简。
调用时候 必须是函数式接口
类名::get成员属性
//实体类:
@Data
public class Book {
private Integer id;
private String type;
private String name;
}
//测试类
//实现功能:关键字查询
@Test
void testByLike(){
String name = "Spring";
LambdaQueryWrapper<Book> lambdaQueryWrapper = new LambdaQueryWrapper<Book>();
lambdaQueryWrapper.like(name!=null,Book::getName,name);
bookDao.selectList(lambdaQueryWrapper);
}
这里的用法是获取Book中name属性所对应的值
super::实例方法
public class Task {
public static void main(String[] args) {
test test = new test();
test.test();
}
}
class test extends ParentTest{
public void test(){
String[] str={"aaa","bbb","ccc"};
List<String> stringList = Arrays.asList(str);
stringList.forEach(super::print);
}
}
class ParentTest{
void print(String s){
System.out.println(s);
}
}