java8 语言特性

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 功能.

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

子类重写

使用类名.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 类有大量辅助方法

向后兼容

Date 和 Calendar 新增的 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.heiqu.com/zwyjpy.html