一、优化线程
//JDK1.7及以前创建
Thread thread = new Thread(
new Runnable() {
@Override
public void run() {
System.out.println("原始线程");
}
}
);
//JDK1.8之后 Lambda创建
Thread thread2 = new Thread(() -> {
System.out.println("Lambda创建线程");
});
二、优化集合操作
Lambda里面的核心就是 () -> 这个操作,那么具体是什么意思,我们看看操作集合的例子
List<String> list = new ArrayList<>();
list.add("A1");list.add("A2");list.add("Z1");
list.add("Z2");list.add("B1");list.add("B2");
List<String> result = new ArrayList<>();
/**
* .stream对集合的操作
* .filter()过滤
* (x) -> 代表集合中的对象(集合中的对象,实体类则会附带一些方法)
* !x.contains("Z") 是需要过滤的表达式,这里相当于 "if ()" 括号中的内容
* .collect(Collectors.toList()); 将返回的结果集转换成List
* */
result = list.stream().filter(
(x)-> !x.contains("Z")
).collect(Collectors.toList());
// 结果集:[A1, A2, B1, B2]
System.out.println(result.toString());
由此可知, ()-> 则是操作内容中的一个对象
当然你还可以使用另外一种语法遍历集合
result.forEach(System.out::println);
结果是,非常简洁
三、函数式接口
首先是一个砖(Brick)接口,有一个搬(move)方法,需要一个类型(type)指定砖的类型
然后定义一个工人(Worker)类,有个工作(Work)方法,传入一个砖(Brick),至于类型并不是自己能决定,需要交给老板决定,方法进行 搬砖: 然后执行搬砖方法 然后搬完了
最后来一个老板(main)开始指定一个工人(Worker worker = new Worker();)
然后通过worker.work((type)-> System.out.println("红 " + type)); 让工人搬红砖。
通过该结构很清晰的反应了一个由老板自由分配工人搬什么砖的列子,同时程序接口也很清晰,这就是表达式之美!!
interface Brick {
void move(String type);
}
class Worker{
public void work(Brick brick){
System.out.println("搬砖:");
brick.move("砖");
System.out.println("搬完了!");
}
public static void main(String[] args) {
Worker worker = new Worker();
//工人开始干活 (砖) -> 要搬 (红)砖
worker.work((type)-> System.out.println("红 " + type));
worker.work((type)-> System.out.println("瓷 " + type));
}
}