-
允许接口有默认方法实现
java8之前接口不允许有方法的的实现,java8允许使用default关键字,为接口添加非抽象的方法实现。public interface Formula { double caculate(int a); default double sqrt(int a){ return Math.sqrt(a); }; }
调用默认方法
Formula formula = (int a)-> a*100; System.out.println(formula.caculate(10));; System.out.println(formula.sqrt(100));;
-
Lambda表达式
之前对list排序,sort方法接受一个Comparator接口作为输入参数,Comparator的实现类可以对输入的;ist中的元素进行比较:List<String> list = Arrays.asList("zhangsan","lisi","wangwu"); list.sort(new Comparator<String>() { @Override public int compare(String o1, String o2) { return o1.compareTo(o2); } }); list.forEach(System.out::println);
可以用lambda简化为:
List<String> list = Arrays.asList("zhangsan","lisi","wangwu"); list.sort((String o1, String o2)-> { return o1.compareTo(o2); } ); list.forEach(System.out::println);
还可以继续简化:
List<String> list = Arrays.asList("zhangsan","lisi","wangwu"); list.sort((o1, o2)-> o1.compareTo(o2)); list.forEach(System.out::println);
-
函数式接口
每一个lambda都能够通过一个特定的接口与一个给定的类型进行匹配。一个所谓的函数式接口必须有且仅有一个抽象方法声明。每个与之对应的lambda表达式必须要与抽象方法的声明相匹配。由于默认方法不是抽象的,因此你可以在你的函数式接口里任意添加默认方法。
任意只包含一个抽象方法的接口,我们都可以用来做成lambda表达式。为了让定义的接口满足要求,因该在接口前加上@FunctionalInterface标注。编译器会注意到这个标注,如果接口中定义了第二个抽象方法的话,编译器会抛出异常。
例子:@FunctionalInterface public interface Converter<F,T> { T convert(F from); } Converter<String,Integer> converter = from -> Integer.valueOf(from); System.out.println(converter.convert("123"));
-
方法和构造函数的引用
上面的代码可以通过静态方法引用Converter<String,Integer> converter = Integer::valueOf; System.out.println(converter.convert("123"));
java8新特性初学笔记
最新推荐文章于 2023-08-07 19:18:02 发布
本文介绍了Java8的一些重要新特性,包括接口的默认方法实现,Lambda表达式的使用,函数式接口的概念,以及方法和构造函数的引用。重点讲解了Lambda的范围,如访问局部变量、成员变量和静态变量的规则。此外,还探讨了内置的函数式接口,如Predicate、Function、Supplier、Consumer和Comparator,并介绍了Optional和Stream的概念及其操作,包括过滤、排序、映射、匹配、计数和归约。文章最后展示了并行流的使用,以提高代码执行效率。
摘要由CSDN通过智能技术生成