Lamda 表达式

  • 使用内部类也可以实现相关的功能, 但使用lamda更简短
  • lamda 的参数类型可以省略
  • 如果是单条语句, lamda 的花括号可以省略
  • 如果是单条语句, lamda 的 return 可以省略
  • 如果是单个参数, 圆括号也可以省略
@FunctionalInterface
interface MathOperation{
int operation(int a,int b);
} MathOperation addition = (int a , int b)-> a+b;
MathOperation subtraction = (a,b)->a-b;

方法引用

方法引用是指可以使用 :: 符号来通过名称引用方法.

可以使用在下面的方法上:

  • 静态方法
  • 实例方法
  • 构造方法, 如 Array::new
List<String> names = new ArrayList<>();
names.add("Mahesh");
names.add("Suresh");
names.add("Ramesh");
names.add("Naresh");
names.add("Kalpesh"); names.forEach(System.out::println);

默认方法

是为了保持向后兼容性, 能够让旧的接口可以使用 java8 提供的 lamda 功能.

如果一个类继承了两个具有相同默认方法的接口, 则可以通过下面方式消除二义性

  1. 子类重写
  2. 使用类名.super.方法名(), 类似委托
public class car implements vehicle, fourWheeler {

   default void print() {
vehicle.super.print();
}
}

接口允许有静态默认方法

Streams API

生成 Streams

  • stream()
  • parallelStream()

forEach

  • forEach
Random random = new Random();
random.ints().limit(10).forEach(System.out::println);

map

List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
List<Integer> squaresList = numbers.stream().map(i->i*i).distinct().collect(Collectors.toList());

filter

limit

sorted

Collectors

String mergedString = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining(", "));

Statistics

IntSummaryStatistics stats = numbers.stream().mapToInt(x->x).summaryStatistics();
System.out.println(stats.getMax());
System.out.println(stats.getSum());
System.out.println(stats.getAverage()

Optional

public static void main(String[] args) {
Integer value1 = null;
Integer value2 = new Integer(10); Optional<Integer> a= Optional.ofNullable(value1);
Optional<Integer> b = Optional.of(value2); System.out.println(sum(a,b));
} public static Integer sum(Optional<Integer> a,Optional<Integer> b){
System.out.println(a.isPresent());
System.out.println(b.isPresent());
Integer value1 = a.orElse(new Integer(0));
Integer value2 = b.get();
return value1+value2;
}

Nashorn Javascript

  • jjs 工具

日期/时间 API

旧 API 的缺陷

  • 线程不安全: Date 不是线程安全的, 而新的 API 是非可变的因此是线程安全的

  • 设计问题: 默认日期从1900开始, 月份从1开始,日期从0开始, 因此不统一, 也没有直接操作的API. 新API提供了工具方法.

  • 难以处理时区: 需要编写大量代码处理时区问题.

    新的API在 java.time 包下提供了两个类: Local 以及 Zoned.

LocalDate, LocalTime , LocalDateTime

ZoneDateTime , ZoneId

Period, Duration

Period 处理基于日期的

Duration 处理基于时间的

Temporal 适配

TemporalAdjusters 类有大量辅助方法

向后兼容

DateCalendar 新增的 toInstant() 方法可以将其转化为新的对象.

Instant instance = data.toInstant();
ZoneId current = ZoneId.systemDefault();
LocalDateTime localDateTime = LocalDateTime.ofInstant(instance, currentZone);

Base64

面试题

使用Lamda为 String 的list排序?

Collections.sort(names,(s1,s2)->s1.compareTo(s2));

java8 语言特性的更多相关文章

  1. Java8新语言特性

    Java8简明指南 欢迎来到Java8简明指南.本教程将一步一步指导你通过所有新语言特性.由短而简单的代码示例,带你了解如何使用默认接口方法,lambda表达式,方法引用和可重复注解.本文的最后你会熟 ...

  2. java8新特性全面解析

    在Java Code Geeks上有大量的关于Java 8 的教程了,像玩转Java 8--lambda与并发,Java 8 Date Time API 教程: LocalDateTime和在Java ...

  3. Java8 新特性 | 如何风骚走位防止空指针异常

    文章整理翻译自 https://winterbe.com/posts/2015/03/15/avoid-null-checks-in-java/ 文章首发于个人网站: https://www.exce ...

  4. Java基础20:Java8新特性终极指南

    更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...

  5. java8新特性(二)_lambda表达式

    最近一直找java8相关新特性的文章,发现都太没有一个连贯性,毕竟大家写博客肯定都有自己的侧重点,这里找到一本书,专门介绍java8新特性的,感觉大家可以看看<写给大忙人看的JavaSE8> ...

  6. 乐字节-Java8新特性-Lambda表达式

    上一篇文章我们了解了Java8新特性-接口默认方法,接下来我们聊一聊Java8新特性之Lambda表达式. Lambda表达式(也称为闭包),它允许我们将函数当成参数传递给某个方法,或者把代码本身当作 ...

  7. 乐字节-Java8新特性-接口默认方法

    总概 JAVA8 已经发布很久,而且毫无疑问,java8是自java5(2004年发布)之后的最重要的版本.其中包括语言.编译器.库.工具和JVM等诸多方面的新特性. Java8 新特性列表如下: 接 ...

  8. java8新特性之Optional类

    NullPointException可以说是所有java程序员都遇到过的一个异常,虽然java从设计之初就力图让程序员脱离指针的苦海,但是指针确实是实际存在的,而java设计者也只能是让指针在java ...

  9. JAVA8新特性——Lamda表达式

    JAVA9都要出来了,JAVA8新特性都没搞清楚,是不是有点掉队哦~ Lamda表达式,读作λ表达式,它实质属于函数式编程的概念,要理解函数式编程的产生目的,就要先理解匿名内部类. 先来看看传统的匿名 ...

随机推荐

  1. keepalived容灾方案,实现nginx负载均衡主从架构(1)

    一:环境准备:4台nginx服务器,两台用yum安装,两台使用源码安装 第一步:使用yum安装nginx服务器,在浏览器输入ip,可以显示以下内容,这步比较简单,安装好修改/usr/share/ngi ...

  2. 微信小程序(19)-- 从底部向上滑出的动画效果

    从底部向上滑出的动画效果: 用到了小程序的触摸事件bindtouchmove,以及创建一个annimation对象,完成动画操作之后使用animation这个对象的export()方法导出动画数据. ...

  3. mobilenetV3

    1.MobilenetV3是通过NAS得到的,结合了v1,v2和MnasNet的结构,包括v1的dw,v2的linear bottleneck和逆残差结构, MnasNet的se结构(接在部分line ...

  4. set -xv

    1.set -x 或set xtrace 会显示+以及脚本中的内容(执行的部分,没执行的不显示) set -xv(脚本中所有的内容都显示,包括没执行的部分) 2.debug=3   //多层级调试 t ...

  5. vue单页面项目中解决安卓4.4版本不兼容的问题

    1.cnpm安装 cnpm i babel-polyfill --save cnpm i es6-promise --save 2.main.js引入 import ‘babel-polyfill‘ ...

  6. JVM---对象访问

  7. linux运维、架构之路-rpm定制、本地yum仓库搭建

    一.定制rpm包 1.环境 [root@m01 ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@m01 ~]# uname - ...

  8. 搭建nginx环境(参考腾讯云实验室)

    使用 yum 安装 Nginx: yum install nginx -y 修改 /etc/nginx/conf.d/default.conf,去除对 IPv6 地址的监听,可参考下面的代码示例: s ...

  9. Linux内核设计与实现 总结笔记(第十六章)页高速缓存和页回写

    页高速缓存是Linux内核实现磁盘缓存.磁盘告诉缓存重要源自:第一,访问磁盘的速度要远远低于访问内存. 第二,数据一旦被访问,就很有可能在短期内再次被访问到.这种短时期内集中访问同一片数据的原理称作临 ...

  10. 博弈论 x

    ——关于博弈论 四道例题带你走进博弈论~ (考虑必败态,必胜态) Ps:要理解这种思想,首先要明白什么叫必败态.说简单点,必败态就是“在对方使用最优策略时,无论做出什么决策都会导致失败的局面”.其他的 ...