实话说,两者有很多不同。如果你能列出最重要的,应该就足够了。你应该解释 Java 8 中的新功能。想 要获得完整清单,请访问官网:Java 8 JDK。 你应该知道以下几个重点: lambda 表达式,Java 8 版本引入的一个新特性。lambda 表达式允许你将功能当作方法参数或将 代码当作数据。lambda 表达式还能让你以更简洁的方式表示只有一个方法的接口 (称为函数式接 口) 的实例。 方法引用,为已命名方法提供了易于阅读的 lambda 表达式。 默认方法,支持将新功能添加到类库中的接口,并确保与基于这些接口的旧版本的代码的二进制兼 容性。 重复注解,支持在同一声明或类型上多次应用同一注解类型。 类型注解,支持在任何使用类型的地方应用注解,而不仅限于声明。此特性与可插入型系统一起使 用时,可增强对代码的类型检查。
Java SE 8最受欢迎和最著名的最新功能包括以下内容: 功能接口。集合API增强功能。Lambda表达式。分流器。流API等。
Java SE 8具有以下功能,使其优于其他功能: 它编写并行代码。它提供了更多可用的代码。它具有改进的性能应用程序。它具有更易读和简洁的代 码。它支持编写包含促销的数据库。
Lambda表达式是Java SE 8,是匿名函数的名称,该匿名函数有助于接受一组不同的输入参数,并提供 各种结果结果。
Lambda表达式是作为代码块创造的,因为它没有名称,可以带有或不带有参数和结果。
当我们使用Lambda表达式时,这意味着我们正在使用功能接口。因此,它们都是相互关联的。这意味 着Lambda表达式是Functional接口的一部分,Functional接口是一个承载各种其他功能和表达式的更大 平台。
Nashorn是在Java SE 8的Java平台上使用的最新Javascript处理引擎。
Map和FlatMap流操作之间的主要区别在于,前者将返回值包装在其序数类型内,而后者则没有。
Map和FlatMap流操作都是中间流操作,它们接收一个函数并将这些函数应用于流的不同元素。
Java SE 8中的流管道用于通过拆分可能在一个流上发生的操作来将操作链接在一起。
使用Stream Pipeline的强制性在于存在终端操作,该操作有助于返回最终值并支持管道的终止。
新的日期和时间API是在Java SE 8中的java time软件包下设计的,因此可以避免与JDK或Java.util.date相 关的问题。
Java SE 8的核心API类包括LocalDate,LocalTime和LocalDateTime。
PerGen的大小是固定的,不能动态增长,而Metaspace可以动态增长,并且确实具有任何类型的大小约 束。
不,功能接口和SAM接口之间没有区别。 SAM接口或单一抽象方法接口是Java SE 8 API中定义的一种功 能接口。
Java 8用默认方法与静态方法这两个新概念来扩展接口的声明。默认方法与抽象方法不同之处在于抽象 方法必须要求实现,但是默认方法则没有这个要求,就是接口可以有实现方法,而且不需要实现类去实 现其方法。我们只需在方法名前面加个default关键字即可实现默认方法。为什么要有这个特性?以前当 需要修改接口的时候,需要修改全部实现该接口的类。而引进的默认方法的目的是为了解决接口的修改 与现有的实现不兼容的问题。
Stream可以链式书写代码,需要几行搞定的代码,Stream可以一行搞定,Stream是使用内部迭代,而 且Stream支持并行操作 输出
interface IDefaultFunction{
default void study(){
System.out.println("什么时候能找到工作");
}
static void finJob(){
System.out.println("开始找工作");
}
}
class DefaultFunction implements IDefaultFunction{
}
@Test
public void streamTest(){
List<Integer>list = new ArrayList<>();
list.add(2);
list.add(4);
list.add(5);
list.forEach(integer -> {
System.out.println(integer);
});
System.out.println("=======分割线=========");
List<Integer> list2 = list.stream().filter((i)->
i>2).collect(Collectors.toList());
list2.forEach(i-> System.out.println(i));
}
2
4
5
=======分割线=========
4
5
filter:接受lamada表达式,从中截取一符合条件的元素 limit:截流limit(5),表示截取五个元素 skip(n):跳过元素,返回一个扔掉了前n个元素的流,若流中元素不足n个,则返回一个空流,与limit(n) 互补 distinct:筛选,通过流所生成元素的hashCode()和equals()去除重复元素 map–接收Lambda,将元素转换成其他形式或提取信息
@Repeatable注解
特别是parallelSort,这个将排序拆分很多小的集合,运用多线程进行排序,最后合并,得到最终想要的结 果。
Clock LocalDate 只保存有ISO-8601日期系统的日期部分,有时区信息 LocalTime 只保存ISO-8601日期系统的时间部分,没有时区信息 LocalDateTime类合并了LocalDate和LocalTime,它保存有ISO-8601日期系统的日期和时间,但是没有 时区信息 ZonedDateTime,它保存有ISO-8601日期系统的日期和时间,而且有时区信息 Duration类,Duration持有的时间精确到纳秒。它让我们很容易计算两个日期中间的差异
Java 8提供了一个新的Nashorn javascript引擎,它允许我们在JVM上运行特定的javascript应用
新的Base64API也支持URL和MINE的编码解码
Java 8新增加了很多方法支持并行的数组处理parallelSort()
java.util.concurrent.ConcurrentHashMap中加入了一些新方法来支持聚集操作 java.util.concurrent.ForkJoinPool类中加入了一些新方法来支持共有资源池 java.util.concurrent.locks.StampedLock类提供一直基于容量的锁,这种锁有三个模型来控制读写操作 (它被认为是不太有名的 java.util.concurrent.locks.ReadWriteLock类的替代者)
Lambda Expression可以定义为允许用户将方法作为参数传递的匿名函数。这有助于删除大量的样板代 码。Lambda函数没有访问修饰符(私有,公共或受保护),没有返回类型声明和没有名称。 Lambda表达式允许用户将“函数”传递给代码。所以,与以前需要一整套的接口/抽象类想必,我们可以 更容易地编写代码。例如,假设我们的代码具有一些复杂的循环/条件逻辑或工作流程。使用lambda表 达式,在那些有难度的地方,可以得到很好的解决。
参考 https://zhuanlan.zhihu.com/p/215758969 https://baijiahao.baidu.com/s?id=1667297300847848263&wfr=spider&for=pc https://blog.csdn.net/wangbiao007/article/details/103229950 https://www.cnblogs.com/wangwanchao/p/5269648.html
如果大家觉得还不错,点赞,收藏,分享,一键三连支持我一下~