019JDK1.8新特性(java基础)

目录

1、Lambda表达式

2、Stream API

3、Optional类

4、双冒号“::”

5、接口default 关键字

6、函数式接口(接口只含一个抽象方法)

7、时间和日期API

8、HashMap性能提升

9、IO流新增API


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);
});

流中还提供了一些其他的常用方法

  • 遍历
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值