java8的新特性
时间:2019-04-18
本文章向大家介绍java8的新特性,主要包括java8的新特性使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
java8的性特性
java8的新特性简化了以前代码不必要的长度,加快了其运算速度;
- java8引入Lambda
java8中引入了Lambda;其简化了代码列如:
//没有使用java8特性
public class Test {
static List<User> users = Arrays.asList(new User(1, "张三", 2),
new User(2, "李四", 4),
new User(3, "王五", 18),
new User(4, "赵六", 13));
public static void main(String[] args) {
//使用匿名内部类的方式根据人的年龄进行升序
Comparator<User> comparator = new Comparator<User>() {
@Override
public int compare(User o1, User o2) {
return o1.getAge()-o2.getAge();
}
};
Collections.sort(users, comparator);
for (User user : users) {
System.out.println(user);
}
}
}
public class Test {
//使用Lambda后的代码
static List<User> users = Arrays.asList(new User(1, "张三", 2),
new User(2, "李四", 4),
new User(3, "王五", 18),
new User(4, "赵六", 13));
public static void main(String[] args) {
//使用匿名内部类的方式根据人的年龄进行升序
Collections.sort(users, (u1,u2)->u1.getAge()-u2.getAge());
for (User user : users) {
System.out.println(user);
}
}
}
使用java8的特性Lambda后代码量减少了很多
Lambda允许把函数作为一个方法的参数,或者把代码看成数据。
为了使现有函数更好的支持Lambda表达式,Java 8引入了函数式接口的概念。函数式接口就是只有一个方法的普通接口。
java.lang.Runnable与java.util.concurrent.Callable是函数式接口最典型的例子
添加了一个注解@FunctionalInterface 用来标注该类为函数式接口
也可以简洁的代码的开发例如 使用@FunctionalInterface
@FunctionalInterface
public interface FilterInfo<T> {
boolean pro(T t);
}
public class Test {
static List<User> users = Arrays.asList(new User(1, "张三", 2),
new User(2, "李四", 4),
new User(3, "王五", 18),
new User(4, "赵六", 13),
new User(5, "马", 1));
public static void main(String[] args) {
//编号大于2且年龄大于4的人
List<User> userInfo = people(users, (e)->((User) e).getId()>2);
userInfo = people(userInfo, (a)->((User) a).getAge()>4);
for (User user : userInfo) {
System.out.println(user);
}
}
public static List<User> people(List<User> users,FilterInfo filterInfo) {
List<User> user = new ArrayList<>();
for (User user2 : users) {
if (filterInfo.pro(user2)) {
user.add(user2);
}
}
return user;
}
}
个人感觉没啥用和自己定义一个泛型类提出公用方法来使用没什么区别——————别喷、别喷、别喷
我们可以在接口中定义默认方法,使用default关键字,并提供默认的实现。所有实现这个接口的类都会接受默认方法的实现,除非子类提供的自己的实现。例如:
public interface DefaultFunctionInterface {
default String defaultFunction() {
return "default function";
}
}
我们还可以在接口中定义静态方法,使用static关键字,也可以提供实现。
接口的默认方法和静态方法的引入,其实可以认为引入了C++中抽象类的理念,以后我们再也不用在每个实现类中都写重复的代码了。
其实Lambda表达式的写法理解起来是这样的(个人见解)
Collections.sort(users, (u1,u2)->u1.getAge()-u2.getAge());
users大家都可以理解 -> 的左侧是要入参的参数 右侧的是条件 列如在函数式接口中定义了一个boolean类型的抽象方法在引用时进行判断时右侧的就可以理解为if判断中的判断条件。也就是Lambda的重中之重 主体的表达式。
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- PHP attributes()函数讲解
- PHP children()函数讲解
- spring-boot-route(四)全局异常处理
- PHP registerXPathNamespace()函数讲解
- Python闭包装饰器使用方法汇总
- spring-boot-route(五)整合Swaager2生成接口文档
- spring-boot-route(六)整合JApiDocs生成接口文档
- Python unittest基本使用方法代码实例
- spring-boot-route(七)整合jdbcTemplate操作数据库
- Pytorch 卷积中的 Input Shape用法
- 解决TensorFlow程序无限制占用GPU的方法
- 基于Python的自媒体小助手—登录页面的实现代码
- PHP addAttribute()函数讲解
- PHP PDOStatement::setAttribute讲解
- PHP中的访问修饰符简单比较