JDK1.8新特性
-
函数式接口
定义:就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。
使用:在接口上面使用@FunctionalInterface注解表明该接口是一个函数式接口
示例
@FunctionalInterface public interface TestService { void test01(); }
如果写两个接口则报错
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bthaHw6R-1604480076350)(C:\Users\hang_yang2\AppData\Roaming\Typora\typora-user-images\image-20201030084046709.png)]
作用:函数式接口可以对现有的函数友好地支持 lambda。
-
lambda表达式
-
定义:lambda表达式是实现函数式接口的一个快捷方式,前提必须是函数式接口
-
语法:三要素(参数,箭头,代码)
(参数1,参数2…) -> {方法内容}
-
使用:
如下示例线程开启普通方式
public static void main(String[] args) { Runnable runnable1 = new Runnable() { @Override public void run() { for (int i = 0; i < 10; i++) { System.out.println("线程1启动了"+i); } } }; // runnable1.run(); new Thread(runnable1).start(); }
使用lambda表达式
Runnable runnable2 = () -> { for (int i = 0; i < 10; i++) { System.out.println("线程2启动了"+i); } }; new Thread(runnable2).start();
- 自定义函数式接口实现lambda表达式
接口内容
@FunctionalInterface public interface TestService { void test01(String name); }
使用lambda表达式实现这个接口
TestService testService = (String str) -> { System.out.println(str); }; String name = "Hello World!"; testService.test01(name);
-
-
stream流
-
介绍
java8新增了stream流的特性,能够让用户以函数式的方式、更为简单的操纵集合等数据结构,并实现了用户无感知的并行计算。
-
使用
List<Person> personList = new ArrayList<>(); personList.add(new Person("zs",18)); personList.add(new Person("ls",25)); personList.add(new Person("ww",20)); personList.add(new Person("xds",23)); personList.add(new Person("as",19)); personList.add(new Person("cv",20)); //过滤长度大于等于3的name personList.stream().filter(person -> person.getName().length() < 3).forEach(person -> System.out.println(person.getName())); //foreach循环集合 //将所有的name组成一个新的集合 List<String> nameList = personList.stream().map(person -> person.getName()).collect(Collectors.toList()); System.out.println(nameList); //将所有的name组成一个字符串 String collect = personList.stream().map(person -> person.getName()).collect(Collectors.joining(",")); System.out.println(collect); //获取集合中age的和 long sum = personList.stream().mapToLong(Person::getAge).summaryStatistics().getSum(); System.out.println(sum); //获取集合中age的和 long sum2 = personList.stream().mapToLong(Person::getAge).sum(); System.out.println(sum2);
-
long sum2 = personList.stream().mapToLong(Person::getAge).sum();
System.out.println(sum2);