java8 Lambda尝尝鲜
时间:2022-05-06
本文章向大家介绍java8 Lambda尝尝鲜,主要内容包括首先是创建线程的方式、集合排序方式、控制台输出方式、对String类里的方法引用、下面介绍在接口中添加默认的方法、还可以在接口中增加静态方法、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
转载:猿天地 链接:http://cxytiandi.com/blog/detail/2196
java8都已经发布这么久了,一直没来得及使用,线上环境基本上是1.6,一下子升级的话还是有点危险,不过私下可以尝试下一些新的语法。
今天就简单的列出几种lambda的一些写法和之前的写法有什么不同。
首先是创建线程的方式
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("我是一个线程");
}
}).start();
//新方式
new Thread(() -> {
System.out.println("我是一个线程");
}).start();
我们可以看到,Runnable这个接口被() -> 代替了。 也不用重写run方法了。
集合排序方式
List<String> names = Arrays.asList("张三", "张三丰" ,"张");
names.sort(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return Integer.compare(o1.length(), o2.length());
}
});
//新方式
names.sort((o1, o2) -> Integer.compare(o1.length(), o2.length()));
这边我们按名称字数的少到多排序
控制台输出方式
for (String name : names) {
System.out.println(name);
}
//新方式
names.forEach(System.out::println);
直接可以用forEach输出,是不是很方便呀。
下面我们介绍下构造方法的引用,上面的out::println是引用方法,下面是引用构造方法
public class Student {
private String name;
public Student(String name){
this.name = name;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
//循环创建Student对象
names.stream().map(Student::new).forEach( stu -> {
System.out.println(stu.getName());
});
对String类里的方法引用
String[] strs = "welcome from cxytiandi.com".split(" ");
Arrays.sort(strs, String::compareToIgnoreCase);
System.out.println(Arrays.toString(strs));
下面介绍在接口中添加默认的方法
interface Person {
long getId();
default String getName() { return "cxytiandi.com"; }
}
class Teach implements Person {
public long getId() { return 42; }
public String getName() { return "猿天地"; }
}
还可以在接口中增加静态方法
public class StaticInterfaceMethods {
public static void main(String[] args) {
System.out.println(YuanTianDi.sayHello("World"));
}
}
interface YuanTianDi {
String hello();
static String sayHello(String key) {
return "Hellot" + key;
}
}
- C++命名规则
- 论JavaScript的作用域
- 删除链表中的重复元素
- Single Number and Single Number II
- 前端限制上传文件的类型
- JavaSript模块规范 - AMD规范与CMD规范介绍
- [大数据之Sqoop] —— Sqoop初探
- [大数据之Sqoop] —— 什么是Sqoop?
- Node.js包管理器Yarn的入门介绍与安装
- static_cast ,reinterpret_cast
- NodeJS使用formidable实现文件上传
- 签下北方最大港口,聚焦无人驾驶卡车技术的主线科技朝商业化又进一步
- 对缓存的思考——提高命中率
- 实用手册:130+ 提高开发效率的 vim 常用命令
- 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 文档注释
- 深度学习之卷积神经网络(CNN)的应用-验证码的生成与识别
- struts2的验证
- 强化学习详解与代码实现
- Spring源码学习笔记(5)——@Conditonal注解
- 你好,CloudBase CLI 1.0
- Spring源码学习笔记(6)——REST服务的拦截
- Spring源码学习笔记(7)——使用@Import导入组件
- 深度强化学习(DQN-Deep Q Network)之应用-Flappy Bird
- Could not load driverClass ${jdbc.driver}
- Js通过值获取索引下标
- Spring源码学习笔记(8)——Bean的生命周期
- hibernate系列之一
- Flutter定义tabbar底部导航路由跳转
- hibernate系列之二
- Flutter配置路由组件抽离及页面传参