博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java8 语言特性
阅读量:5267 次
发布时间:2019-06-14

本文共 2690 字,大约阅读时间需要 8 分钟。

Lamda 表达式

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

方法引用

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

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

  • 静态方法
  • 实例方法
  • 构造方法, 如 Array::new
List
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
numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);List
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
a= Optional.ofNullable(value1); Optional
b = Optional.of(value2); System.out.println(sum(a,b));}public static Integer sum(Optional
a,Optional
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));

转载于:https://www.cnblogs.com/walkinhalo/p/11125727.html

你可能感兴趣的文章
AndroidAlbum 跳转到相册或者调用系统拍照的功能
查看>>
WPF 后台重写 DataTemplate
查看>>
hdu-4417 Super Mario(树状数组 + 划分树)
查看>>
XOR Queries(莫队+trie)
查看>>
代码这样写不止于优雅(2)
查看>>
Words
查看>>
Adroid: ProgressBar 的使用
查看>>
最全免费CDN公共库——网站提速
查看>>
Java获取IP地址:request.getRemoteAddr()警惕
查看>>
BZOJ2914: [Poi1997]ADDON【01背包】
查看>>
java课程设计——算术运算测试个人博客
查看>>
Redis了解一下
查看>>
MySQL binlog
查看>>
CSS3——CSS 文本
查看>>
微软build大会.net平台大事汇总
查看>>
Tair rdb(redis存储引擎)实现介绍
查看>>
Java读取键盘输入
查看>>
handler
查看>>
HDU 1158 Employment Planning (DP)
查看>>
Android模拟器使用笔记,学习head_first python 安卓开发章节
查看>>