java8 语言特性
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 功能.
如果一个类继承了两个具有相同默认方法的接口, 则可以通过下面方式消除二义性
- 子类重写
- 使用类名.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));
java8 语言特性的更多相关文章
- Java8新语言特性
Java8简明指南 欢迎来到Java8简明指南.本教程将一步一步指导你通过所有新语言特性.由短而简单的代码示例,带你了解如何使用默认接口方法,lambda表达式,方法引用和可重复注解.本文的最后你会熟 ...
- java8新特性全面解析
在Java Code Geeks上有大量的关于Java 8 的教程了,像玩转Java 8--lambda与并发,Java 8 Date Time API 教程: LocalDateTime和在Java ...
- Java8 新特性 | 如何风骚走位防止空指针异常
文章整理翻译自 https://winterbe.com/posts/2015/03/15/avoid-null-checks-in-java/ 文章首发于个人网站: https://www.exce ...
- Java基础20:Java8新特性终极指南
更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...
- java8新特性(二)_lambda表达式
最近一直找java8相关新特性的文章,发现都太没有一个连贯性,毕竟大家写博客肯定都有自己的侧重点,这里找到一本书,专门介绍java8新特性的,感觉大家可以看看<写给大忙人看的JavaSE8> ...
- 乐字节-Java8新特性-Lambda表达式
上一篇文章我们了解了Java8新特性-接口默认方法,接下来我们聊一聊Java8新特性之Lambda表达式. Lambda表达式(也称为闭包),它允许我们将函数当成参数传递给某个方法,或者把代码本身当作 ...
- 乐字节-Java8新特性-接口默认方法
总概 JAVA8 已经发布很久,而且毫无疑问,java8是自java5(2004年发布)之后的最重要的版本.其中包括语言.编译器.库.工具和JVM等诸多方面的新特性. Java8 新特性列表如下: 接 ...
- java8新特性之Optional类
NullPointException可以说是所有java程序员都遇到过的一个异常,虽然java从设计之初就力图让程序员脱离指针的苦海,但是指针确实是实际存在的,而java设计者也只能是让指针在java ...
- JAVA8新特性——Lamda表达式
JAVA9都要出来了,JAVA8新特性都没搞清楚,是不是有点掉队哦~ Lamda表达式,读作λ表达式,它实质属于函数式编程的概念,要理解函数式编程的产生目的,就要先理解匿名内部类. 先来看看传统的匿名 ...
随机推荐
- 【Git】error: RPC failed; HTTP 413 curl 22 The requested URL returned error:413 Request Entity Too Large
error: RPC failed; HTTP 413 curl 22 The requested URL returned error:413 Request Entity Too Large fa ...
- 013-linux系统管理——系统资源查看
linux系统管理——系统资源查看 ############# vmstat 命令 监控系统资源 ############# vmstat [刷新时间 刷新次数] [root@zabbix ~]# v ...
- 大数据数据库HBase(二)——搭建与JavaAPI
一.搭建 1.选择一台没有ZK的机器(HBase自带ZK,可能会导致冲突) 2.选择版本2.0.5的HBase 3.解压HBase2.0.5 4.配置HBase的HBASE_HOME和path 5.修 ...
- python字典总结
今天总结一篇关于字典的知识点> 字典也是python提供的一种常用的数据结构,它用于存放具有映射关系的数据 比如成绩表,语文:34,数学:99,如果单纯的使用两个列表保存这组数据,则无法记录两组 ...
- jvm 堆
1.堆内存线程共享,在虚拟机启动时创建. 2.几乎所有的对象实例都在堆上分配:栈中存放基本数据类型和堆中对象的引用. GC回收 程序计数器.虚拟机栈.本地方法栈随线程而生,随线程而灭.栈中的栈帧随着方 ...
- element隐藏组件滚动条scrollbar使用
可使用 组件 <el-scrollbar></el-scrollbar> 设置 组件的样式 为 高度100% <el-scrollbar style="heig ...
- python碎片 - 函数参数
一个*传参: 方式1:如果想传一个列表中的值,实参前加*.如: *[1,2,3] 方式2:直接传入一个列表,不加*.如[1,2,3],则传入的是一整个列表,包括[] 两个**传参: 方式1,:{nam ...
- ACM/IOI 国家队集训队论文集锦
转自:https://blog.csdn.net/txl199106/article/details/49227067 国家集训队1999论文集 陈宏:<数据结构的选择与算法效率——从IOI98 ...
- H5 FileReader对象
前言:FileReader是一种异步文件读取机制,结合input:file可以很方便的读取本地文件. input:file 在介绍FileReader之前,先简单介绍input的file类型. < ...
- man cal
CAL(1) CAL(1) NAME cal - 显示一个 ...