标题主要包含以下知识点:
Stream 流
FlatMap
Steam流
Stream 代表了来自某个源的对象的序列,这些序列支持聚集操作。下面是 Stream 的一些特性:
元素序列:Stream 以序列的形式提供了特定类型的元素的集合。根据需求,它可以获得和计算元素,但不会储存任何元素。
源:Stream 可以将集合、数组和 I/O 资源作为输入源。
聚集操作:Stream 支持诸如filter、map、limit、reduce等的聚集操作。
流水技术:许多 Stream 操作返回了流本身,故它们的返回值可以以流水的形式存在。这些操作称之为中间操作,并且它们的功能就是负责输入、处理和向目标输出。collect()方法是一个终结操作,通常存在于流水线操作的末端,来标记流的结束。
自动迭代:Stream 的操作可以基于已提供的源元素进行内部的迭代,而集合则需要显式的迭代。
相关方法
集合的接口有两个方法来产生流:
stream():该方法返回一个将集合视为源的连续流。
parallelStream():该方法返回一个将集合视为源的并行流。
常用方法
forEach:该方法用于对 Stream 中的每个元素进行迭代操作。
map:该方法用于将每个元素映射到对应的结果上。
filter:该方法用于过滤满足条件的元素。
limit:该方法用于减少 Stream 的大小。
sorted:该方法用于对 Stream 排序。
有一个很长的例子:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.IntSummaryStatistics;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
import java.util.Map;
public class StreamTest {
public static void main(String args[]){
// 使用Java 8的新特性
List<String> strings = Arrays.asList("efg", "", "abc", "bc", "ghij","", "lmn");
System.out.println("Using Java 8: ");
System.out.println("List: " +strings);
long count = strings.stream().filter(string->string.isEmpty()).count();
System.out.println(