JDK1.8新特性--API

非原创,知识总结性文章

用于集合上批量数据操作的 Java Stream API

java.util.stream是 Java 8中添加的新程序包,以便对集合执行类似过滤/映射/归约的操作。Stream API 将允许顺序执行和并行执,是最好的功能之一,如果经常处理Collections,而且集合元素很多,我们可以根据某些条件过滤掉它们。

Collection接口已使用 stream()和 parallelStream()默认方法进行了扩展,以获取用于顺序执行和并行执行的 Stream。让我们用一个简单的例子看看它们的用法。

package com.taotao.springboot;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;

public class StreamList {
    public static void main(String[] args) {
        List myList = new ArrayList<>();
        for (int i = 0; i < 100; i++) myList.add(i);

        //串行流
        Stream sequentialStream = myList.stream();

        //并行流
        Stream parallelStream = myList.parallelStream();

        //过滤
        Stream highNums = parallelStream.filter(p -> p > 90);
        //使用 forEach 遍历
        highNums.forEach(p -> System.out.println("High Nums parallel=" + p));

        Stream highNumsSeq = sequentialStream.filter(p -> p > 90);
        highNumsSeq.forEach(p -> System.out.println("High Nums sequential=" + p));
    }
}

运行上述代码的 main 方法,你将看到如下输出:
High Nums parallel=91
High Nums parallel=93
High Nums parallel=96
High Nums parallel=94
High Nums parallel=95
High Nums parallel=92
High Nums parallel=97
High Nums parallel=98
High Nums parallel=99
High Nums sequential=91
High Nums sequential=92
High Nums sequential=93
High Nums sequential=94
High Nums sequential=95
High Nums sequential=96
High Nums sequential=97
High Nums sequential=98
High Nums sequential=99
请注意,并行流不按集合元素排列顺序处理,但在处理大量元素的集合时将非常有用。

新的时间 API

在 Java中 使用日期,时间和时区一直很困难。Java中没有用于日期和时间的标准方法或API。java.time程序包是 Java 8一个不错的附加功能,它将简化Java中使用时间的过程。

仅查看 Java Time API软件包,我就可以感觉到它非常易于使用。它具有一些子包java.time.format,这些子包提供用于打印和解析日期和时间的类,并java.time.zone提供对时区及其规则的支持。

新的Time API在整月的几个月和一周中的几天中都更喜欢枚举而不是整数常量。将DateTime对象转换为字符串的类是DateTimeFormatter。

集合API的改进

我们已经看到了 forEach()方法和用于集合的 Stream API。Collection API还有一些新方法是:

Iterator:forEachRemaining(Consumer action)在所有元素都已处理完毕或该动作引发异常之前,对每个剩余元素执行给定操作的默认方法。
Collection:removeIf(Predicate filter)删除此集合中所有满足特定条件的元素的默认方法。
Collection:spliterator() 该方法返回Spliterator实例,该实例可用于顺序或并行遍历元素。
map:replaceAll(),compute(),merge()方法。
具有键冲突的HashMap类的性能改进

并发 API 的改进

一些重要的并发API增强功能包括:
ConcurrentHashMap: compute(),forEach(),forEachEntry(),forEachKey(),forEachValue(),merge(),reduce()和search()方法。
CompletableFuture:可以明确完成(设置其值和状态)。
ExecutorsnewWorkStealingPool():使用所有可用处理器作为目标并行度级别创建窃取线程池的方法。

Java IO改进

一些IO改进包括:
Files.list(Path dir) 返回延迟填充的Stream,其元素是目录中的条目。
Files.lines(Path path) 从文件中读取所有行作为流。
Files.find() 通过在以给定起始文件为根的文件树中搜索文件,返回通过路径延迟填充的Stream。
BufferedReader.lines() 返回一个Stream,其元素是从此BufferedReader中读取的行。

其他核心API改进

一些其他API改进:

  • ThreadLocal 静态方法可以使用 withInitial(Supplier supplier) 轻松创建实例。
  • Comparator 接口已扩展了许多默认和静态方法,用于自然排序,反向排序等。
  • Integer,Long 和 Double 包装器类中的 min(),max()和sum()方法。
  • 布尔类中的 logicalAnd(),logicalOr()和 logicalXor()方法。
  • ZipFile.stream()方法获取ZIP文件条目上的有序 Stream。条目以在 ZIP 文件的中央目录中出现的顺序出现在 Stream 中。
  • Math类中的几种实用方法。
  • jjs 添加命令以调用 Nashorn Engine。
  • jdeps 添加命令以分析类文件
  • JDBC-ODBC 桥已被删除。
  • PermGen 内存空间已被删除

你可能感兴趣的:(JDK1.8新特性--API)