目录
Java 8 是oracle公司于2014年3月发布,可以看成是自Java 5 以来最具革命性的版本。比较受重视的就是下面这些新特性,实际上还有js升级,注解升级等,不过主要关注这几些常用的新特性就够用了,尤其是lambda表达式和Stream API
1、Lambda表达式
基于很多代码是有一定规律的,而且如果按原有的语法规则进行书写,就会产生大量的代码,那么,lambda的诞生在某些语法上简化了代码的书写,也提高了代码的可读性。
1、表达式写法
(parameters) -> { statements; }
或parameter -> statements;
当参数只有一个的时候,parameters外面的小括号()可以去掉,当表达式只有一句的时候,statements外面的大括号{}也可以去掉
2、什么时候用?
(1)函数式接口
指的是接口内只有一个方法,当我们使用这个方法的时候,可以用lambda表达式代替匿名类
跟下面的线程部分一起演示吧
(2)线程的创建和使用
比如Runnable接口,以前的使用方式:
new Thread(new Runnable(){
@Override
public void run()
{
System.out.println("No use lambda.");
}
}).start();
用lambda表达式:
new Thread(()->System.out.println("use Lambda")).start();
当然,run()方法用lambda表达式也能再扩展一下,增加一些内容
public static void main(String[] args) {
new Thread(() -> {
Thread.currentThread().setName("线程一");
for (int i = 0; i < 5; i++) {
System.out.println("第" + i + "秒");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
(3)简化集合类的使用
比如说集合的遍历、排序等功能
void testCollection() {
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(3);
list.add(5);
list.add(2);
list.sort(Comparator.naturalOrder());
list.forEach(i->System.out.println(i));
Map<String,Integer> map = new HashMap<String,Integer>();
map.put("小刺猬",2);
map.put("小蚂蚁",1);
map.put("小猪猪",50);
map.put("小喵喵",10);
map.forEach((key,value)->{value = value+5;System.out.println(key+"的体重是"+value+"kg");});
}
输出结果:
1
2
3
5
小刺猬的体重是7kg
小蚂蚁的体重是6kg
小猪猪的体重是55kg
小喵喵的体重是15kg
(4)基于Stream
这个也是1.8新特性中一个重要的点,要在下面要详细地说
2、Stream API
流是 Java API 的新成员,它允许以声明性方式处理数据集合,可以把它们看成遍历数据集的高级迭代器
它更像一个高级版本的 Iterator,原始版本的 Iterator,用户只能显式地一个一个遍历元素并对其执行某些操作
比如说我们要遍历一个list,并对其中的数据做一些改变,用之前的遍历方式:
for (Animal animal : list) {
animal.setWeight(animal.getWeight()*10);
}
用stream
list.stream().forEach(animal->{
animal.setWeight(animal.getWeight()*10);
});
流中还提供了一些其他的常用方法
- 遍历