1. Stream
Stream 是元素的集合,类似 Iterator,但行为和集合类又有所不同,是对集合对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作,或者大批量数据操作。Stream 借助于同样新出现的 Lambda 表达式,极大的提高编程效率和程序可读性。同时它提供串行和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势,使用 fork/join 并行方式来拆分任务和加速处理过程。通常编写并行代码很难而且容易出错, 但使用 Stream 无需编写一行多线程的代码,就可以很方便地写出高性能的并发程序。
2. 用法
2.1 创建 Stream
Stream<Integer> s1 = Stream.of(1); Stream<Integer> s2 = Stream.of(2, 3, 4); Stream<Double> s3 = Stream.generate(Math::random); Stream.iterate(1, x -> x + 1).limit(10).forEach(System.out::print); List<Integer> x = Lists.newArrayList(); Stream<Integer> s4 = x.stream();
四个方法,两种方式
第一种方式,of、generate、iterate,静态工厂方法,区别在于参数的不同
第二种方式,Collection 接口有一个 stream 方法
2.2 distinct、count、limit、sorted、max、min
Stream<Integer> s = Stream.of(1, 2, 3, 4, 5, 1); // 去重、排序、截断、计算个数 System.out.println(s.distinct().sorted((o1,o2) -> o1.compareTo(o2)).limit(3).count()); System.out.println(s.max((o1, o2) -> o1.compareTo(o2)).get()); System.out.println(s.min((o1, o2) -> o1.compareTo(o2)).get());
这几个方法从方法名上就能理解它的意思
2.3 map、mapToInt、mapToLong、mapToDouble
Stream<Integer> s = Stream.of(1, 2, 3, 4); s.map(x -> x * 2).forEach(System.out::print); s.mapToInt(x -> x).forEach(System.out::print); s.mapToLong(x -> x).forEach(System.out::print); s.mapToDouble(x -> x).forEach(System.out::print);
map 对于 Stream 中包含的元素使用给定的转换函数进行转换操作,新生成的 Stream 只包含转换生成的元素。mapToInt、mapToLong、mapToDouble 将新生成的元素转换成特定的类型
2.4 flatMap、flatMapToInt、flatMapToLong、flatMapToDouble
List<Integer> testList0 = Lists.newArrayList(1, 2, 3, 4); List<Integer> testList1 = Lists.newArrayList(6, 7, 8, 9); testList0.stream().flatMap(x -> { if(x == 1 || x ==3) return testList1.stream().skip(x); else return null; }).forEach(System.out::print); // 7899
flatMap 的参数为 Function<? super T, ? extends Stream<? extends R>> mapper 也就是定义一个 Function,这个 Function 的入参是 Stream 中的元素类型,返回的是另一个Stream,其作用和 map 的类似,都是循环元素,不同在返回,map 返回一个对象,flatMap 返回一个 Stream
2.5 allMatch、noneMatch、anyMatch
findFirst、findAny、filter
Stream<Integer> s = Stream.of(1, 2, 3, 4); Predicate<Integer> p = x -> x > 2; s.allMatch(p); // false s.noneMatch(p); // false s.anyMatch(p); // true s.findFirst().orElse(0); // 1 s.findAny().orElse(0); //1 s.filter(p).findFirst().orElse(0); //3
根据判断条件 Predicate 查询,获取对应的元素,match 用于匹配,filter 用作过滤
2.6 skip、peek、collect
Stream<Integer> s = Stream.of(1, 2, 3, 4); s.skip(2).forEach(System.out::print); s.peek(System.out::print).skip(2).limit(2).count(); List<Integer> list = s.collect(Collectors.toList());
skip 返回一个丢弃原 Stream 的前 N 个元素后剩下元素组成的新 Stream
peek 生成一个包含原 Stream 的所有元素的新 Stream,同时会提供一个 Consumer 实例,新 Stream 每个元素被消费的时候都会执行 Consumer
collect 把 Stream 中的要有元素收集到一个结果容器中
2.7 reduce
List<Integer> testList = Lists.newArrayList(1, 2, 3, 4); testList.stream().reduce(0, (sum, item) -> sum + item); // 10 testList.stream().reduce((sum, item) -> sum + item).orElse(0); // 10
reduce 的这两个接口,作用都在于通过后面定义的 BinaryOperator 对 Steam 中的元素进行操作,每次操作的接口,作为 BinaryOperator 中的第一个参数,继续下去,直到所有元素遍历完
相关推荐
List<Menu> children = all.stream().filter(m -> { return Objects.equals(m.getParentId(), root.getId()); }).map((m) -> { m.setChildList(getChildrens(m, all)); return m; } ).collect(Collectors.to...
JDK8特性(Lambda表达式+StreamAPI的简单使用示例代码)
此外,JDK 8还引入了Stream API,它提供了一种声明式的处理数据的方式,特别适合于集合操作。Stream API允许通过链式调用来执行过滤、映射、归约等操作。例如,`List<String> names = list.stream().filter(name -> ...
JDK 8是Oracle公司发布的Java平台标准版的一个重要版本,首次发布于2014年3月。这个版本引入了许多新特性,极大地提升了开发效率和代码质量。本篇文章将详细介绍JDK 8的关键特性和使用方法。 1. **Lambda表达式**...
Java Development Kit (JDK) 8是Java编程语言的一个重要版本,它引入了许多新特性、改进和优化。这个"jdk8官方文档"包含了详细的开发者指南、API参考、教程和其他资源,帮助开发者理解和利用JDK 8的功能。以下是文档...
在这个场景中,我们关注的是JDK 8的RPM安装包,这是一种专为使用Red Hat Package Manager (RPM)的Linux发行版设计的软件包格式。 **一、JDK的组成部分** 1. **Java编译器** (javac):将源代码编译成可执行的字节码...
在这个名为"jdk8.zip"的压缩包中,包含了一个重要的文件"jdk8.exe",这通常是Windows操作系统下的JDK安装程序。 1. **模块系统**:JDK 8引入了JSR 294的模块系统(Java Platform Module System,JPMS),它通过模块...
标题和描述中提到的"jdk-8u25、jdk-8u111、jdk-8u131、jdk-8u181、jdk-8u201"代表了不同版本的JDK,这些版本都是针对Java 8的更新版本,"u"后面的数字代表更新(Update)次数。 Java 8是Oracle公司发布的Java平台...
**Java Development Kit (JDK) 8 是Java编程语言的核心组件,它包含了开发和运行Java应用程序所需的工具和库。此版本是JDK的第181次更新,即JDK 1.8 Update 181(也称为JDK 8u181),它是一个重要的维护版本,提供了...
在这个“jdk8免安装版”中,我们拥有的是已经解压并可以直接使用的JDK8版本,无需进行常规的安装过程。 首先,让我们了解一下JDK8的主要特性: 1. **lambda表达式**:这是JDK8最显著的改变之一,它简化了处理函数...
**Java Development Kit (JDK) 8 安装详解** JDK(Java Development Kit)是Oracle公司提供的用于开发和运行Java应用程序的工具集合。在Java编程领域,JDK8是极其重要的一个版本,它引入了许多新特性,提升了开发...
Jdk8 中 Java8 特性示例,包含 Java 文档和一些单元测试 Java Stream 特性 Stream 不存储元素。 它只是通过计算操作的管道从数据结构、数组或 I/O 通道等来源传送元素。 Stream 本质上是功能性的。 对流执行的操作...
Stream API是JDK8的一大亮点,它提供了用于操作集合的新方式,支持串行和并行流,可以进行高效的数据处理和聚合操作,如map、filter、reduce等。 **5. Date和Time API重构** JDK8对日期和时间API进行了重大改进,...
Java Development Kit (JDK) 1.8,通常被称为JDK 8,是Java编程语言的一个重要版本,由Oracle公司发布。这个版本引入了许多新特性、优化和改进,旨在提高开发人员的效率和代码的可维护性。 JDK 8中文说明文档提供了...
在这个压缩包中,包含两个主要文件:`jdk-8u391-windows-x64.exe`是JDK8的Windows 64位安装程序,`jdk api 1.8_google.CHM`则是JDK8的API中文文档。 首先,让我们详细探讨一下JDK8的安装过程。`jdk-8u391-windows-x...
JDK 8是Java的一个重要里程碑,引入了许多新特性,例如Lambda表达式、Stream API、新的日期和时间API以及默认方法等,这些都极大地提高了开发效率和代码的简洁性。 "jdk8u191"部分表示这是JDK 8的更新191,这是一个...
JDK 8是Oracle公司发布的Java平台标准版的一个重要版本,它引入了许多新特性,对Java社区产生了深远影响。在本篇文章中,我们将深入探讨JDK 8的关键特性和其对开发工作的重要性。 首先,让我们关注JDK 8中的主要新...
Java Development Kit (JDK) 8 是Java编程语言的核心组件,包含了Java运行环境(Java Runtime Environment,JRE)以及开发工具。这个压缩包合集包含了适用于三种主要操作系统的64位版本:Windows、Linux和macOS。...
JDK8U202是Oracle公司发布的一个重要更新版本,尤其值得注意的是,这是JDK 8的最后一个免费提供商业支持的版本。此版本包含了针对Windows和Linux操作系统的64位版本,对于那些依赖Java 8的企业和开发者来说,这是一...
Stream API也是JDK8的一大亮点,它允许对集合进行高效、声明式的操作,提高了代码的可读性和简洁性。此外,新版本还引入了默认方法,使得接口可以有实现,增强了多线程处理的并发工具,比如ForkJoinPool和Parallel ...