流水线:也就是很多流操作本身会返回一个流,可以将多个操作连接起来,形成一个更大的流
//forEach会返回void的终端操作
menu.stream().forEach(System.out.println);
映射是指map()操作,它会返回我们指定的元素属性
flatMap()的作用是,各个数组并不是分别映射成一个流,而是映射成流的内容
例子: 给定一个单词表["Hello", "World"], 想要返回列表['H', 'e', 'l', 'o', 'W', 'r', 'd']
第一次尝试:
word.stream().map(item->item.split(" "))
.distinct()
.toCollect()
map(item->item.split())的返回结果是Stream<String[]>,我们需要的是Stream<String>,distinct操作并不能形成我们想要的结果
第二次尝试:
word.stream().map(item->item.split(" "))
.map(Arrays::stream)
.distinct()
.collect()
map(Arrays::stream)是将每一个数组变为一个流,并不能达到我们要的结果
第三次尝试:
word.stream().map(item->item.split(" "))
.flatMap(Arrays::stream)
.distinct()
.collect()
flatMap(Arrays::stream)会将每一个数组的内容分别映射为流的内容,然后将流合并形成一个流,在进行distinct()就可以达到效果
常见的数据处理的套路是看数据集中的某些元素是否匹配一个给定的元素,Stream Api通过allMatch、anyMatch、noneMatch、findFirst和findAny实现
Optional:
一般用来处理空指针异常的,允许程序中出现null了,一般来说查询的返回结果可以给一个Optional
isPresent():有值返回true,没有值返回false
ifPresent(Consumer<T> block): 会在存在值的时候执行代码块
get(T other): 会在值存在时返回值,不存在值抛出异常
orElse(): 存在值就返回值,不存在值就返回一个默认值
将流中的元素反复结合起来,得到一个值,这样的操作叫做归约操作,归约的优势在于内部迭代和并行化,并行化就是将stream()变为parallelStream()
int sum = numbers.stream().reduce(0, Integer::sum);
//无初始值的情况
Optional<Integer> sum = numbers.stream().reduce((a,b)-> (a+b));
Optional<Integer> sum = numbers.stream().reduce(0, Integer::sum);
Optional<Integer> max = numbers.stream().reduce(Integer:max);
Optional<Integer> min = numbers.stream().reduce(Integer:min);
//使用归约求涉及到拆包的问题
int sum = numbers.stream().reduce(0, Integer::sum);
//map的返回值是Stream<类>,不行
Optional<Integer> sum = numbers.stream().map(类::方法).sum();
//maptoInt()的返回值是IntStream,还支持max()、min()、average()等
Optional<Integer> sum = numbers.stream().mapToInt(类::方法).sum();
//使用orElse来指定OptionalInt的值,如果没有最大值,显方式提供一个默认最大值
OptionalInt<Integer> test = xxx;
int max = test.orElse(1);
Stream<String> stream = Stream.of("modern", "java", "In", "Action");
stream.map(String :: toUpperCase).forEach(System.out::println);
//创建一个空的流
Stream<String> emptyStream = Stream.empty();
int[] numbers = {2, 3, 5, 7, 11, 13};
int sum = Arrays.stream(numbers).sum();
因篇幅问题不能全部显示,请点此查看更多更全内容