您现在的位置是:首页 > 后台技术 > JavaJava
Java8新特性(图文)
第十三双眼睛2022-03-11【Java】人已围观
简介java8新特性
接口新语法
接口中可以有静态方法
运行以后,正常输出了hello
通常,接口中的静态方法用于产生接口对象
Lambda表达式
用Lambda表达式去实现接口,接口中只能有一个方法。
如下:
有一个学生类
有一个接口,用来实现对学生的过滤
第一种实现:写个类去实现,略
第二种实现:用匿名内部类的写法去实现
第三种实现:
第四种实现:
第五种实现:最终实现
注意:当实现有多条语句时,必须要用大括号包起来。
我们想按照一定的规则将学生对象进行过滤
调用的时候,可以这么写:
List<Student> students = filterStudent(list, student -> student.getAge() < 30);
将Lambda表达式直接作为一个参数传进去
实现一个线程
Thread t = new Thread(() ->{ System.out.println("hello"); });
遍历一个数组:
上面是JDK8的写法,如果要改成Lambda的写法,如下:
ss.forEach(s -> { System.out.println(s); });
函数式接口
凡是只有一个抽象方法的接口就叫做函数式接口
@FunctionalInterface
编译器会检查,校验是否是函数式接口
JDK中定义好的函数式接口
方法引用
普通方法引用
接口中可以有静态方法
interface A{ static void hello(){ System.out.println("hello"); } } |
通常,接口中的静态方法用于产生接口对象
Lambda表达式
用Lambda表达式去实现接口,接口中只能有一个方法。
如下:
有一个学生类
public class Student { private String name; private Integer age; private String classNumber; } |
public interface Filter { boolean test(Student student); } |
第二种实现:用匿名内部类的写法去实现
Filter t1 = new Filter() { @Override public boolean test(Student student) { if (student.getAge() < 30) { return true; } return false; } }; |
Filter f2 = (Student student) -> { return student.getAge() < 30; }; |
Filter f3 = (Student student) -> student.getAge()< 30; |
Filter f4 = (student) -> student.getAge()<30; |
我们想按照一定的规则将学生对象进行过滤
public static List<Student> filterStudent(List<Student> studentList,Filter filter){ List<Student> resultList = new ArrayList<>(); studentList.forEach(student -> { if (filter.test(student)) { resultList.add(student); } }); return resultList; } |
List<Student> students = filterStudent(list, student -> student.getAge() < 30);
将Lambda表达式直接作为一个参数传进去
实现一个线程
Thread t = new Thread(() ->{ System.out.println("hello"); });
遍历一个数组:
List<String> ss = new ArrayList<>(); ss.add("aa"); ss.add("bb"); ss.add("cc"); ss.add("dd"); ss.forEach(new Consumer<String>() { @Override public void accept(String s) { System.out.println(s); } }); |
ss.forEach(s -> { System.out.println(s); });
函数式接口
凡是只有一个抽象方法的接口就叫做函数式接口
@FunctionalInterface
编译器会检查,校验是否是函数式接口
JDK中定义好的函数式接口
接口 | 函数描述符 | 方法名 |
Predicate<T> | T-> boolean | test |
Consumer<T> | T->void | accept |
Function<T,R> | T->R | apply |
Supplier<T> | ()->T | get |
BiPredicate<T,R> | (T,R)->boolean | test |
BiConsumer<T,R> | (T,R)->void | accept |
BiFunction<T,U,R> | (T,U)->R | apply |
UnaryOperator | T->T | apply |
BinaryOperate<T> | (T,T)->T | apply |
方法引用
普通方法引用
Tags:
很赞哦! ()