Stream API和Optional类学习笔记

虚树苔原
• 阅读 1284

Stream API

Stream API是Java8的新特性,通常用于对集合进行一些操作,可以帮助开发者写出更高效、整洁的代码。

一、Stream流的创建

1、通过已有的集合来创建流,这种方式使用的比较多

List<String> strings = Arrays.asList("hushucheng", "hufanqie", "hututu", "marong", "marongrong");
Stream<String> stream = strings.stream();

2、使用stream来创建

Stream<String> stream = Stream.of("hushucheng", "hufanqie", "hututu", "marong", "marongrong");

二、中间操作

1、filter
用法如下:

        List<String> strings = Arrays.asList("hushucheng","" ,"hufanqie", "hututu", "marong", "marongrong");
        strings.stream().filter(string -> !string.isEmpty()).forEach(System.out::println);

在例子中,过滤了空字符串。

2、map
用法如下:

        List<String> strings = Arrays.asList("hushucheng","hufanqie", "hututu", "marong", "marongrong");
        strings.stream().map(string -> string.toUpperCase()).forEach(System.out::println);

在例子中,将单词全部映射为大写

3、limit
用法如下:

        List<String> strings = Arrays.asList("hushucheng","hufanqie", "hututu", "marong", "marongrong");
        strings.stream().map(string -> string.toUpperCase()).limit(4).forEach(System.out::println);

用来限制返回的个数

4、skip
用法类似limit,用来跳过若干个数。

5、sorted
用于对流进行排序。

        List<Integer> strings = Arrays.asList(1, 3, 3, 2, 5, 4);
        strings.stream().sorted().forEach(System.out::println);

6、distinct
用于去重。用法略。

三、最终操作

1、forEach
用于迭代流中的每个元素,并执行相应的操作。比如前面的例子中都用到了。

2、collect
将流中的元素累积成一个汇总结果。

List<Integer> strings = Arrays.asList(1, 3, 3, 2, 5, 4);
strings = strings.stream().sorted().collect(Collectors.toList());

3、count
统计流中元素个数。

Optional类

Optional类也是Java8的新特性,用于有效解决NPE问题。

一、Optional对象的创建

1、 empty方法创建一个空对象

Optional<String> s1 = Optional.empty();

2、 of方法可以创建一个非空对象

Optional<String> s2 = Optional.of("marong");

3、 ofNullable方法可以创建一个可以为空的对象

Optional<String> s3 = Optional.ofNullable("marongrong");

二、常用方法

1、ifPresent和isPresent
(1) 调用ifPresent方法,则对象不为空执行相关操作。
(2) 调用isPresent方法可以判断对象是否为空。

2、orElseorElseThroworElseGet
(1) orElse

 System.out.println(s1.orElse("marong").equals("marong"));  \\true
 System.out.println(s3.orElse("marong").equals("marongrong"));  \\true

(2) orElseGet
与orElse的功能一样,不过接受一个函数式接口来生成对象

System.out.println(s1.orElseGet(String::new).equals(""));
System.out.println(s3.orElseGet(() -> "marongrong").equals("marongrong"));

(3) orElseThrow
orElseThrow为空则抛出异常

s1.orElseThrow(IllegalStateException::new);

3、filter
与Stream使用类似

4、map
与stream使用类似

5、flatmap
这是一种级联的方式,能够解决map方式的optional嵌套问题。
http://www.hollischuang.com/w...

点赞
收藏
评论区
推荐文章
执键写春秋 执键写春秋
4年前
Stream流式处理&&Lambda表达式
高度抽象的集合数据处理1.使用Stream流对List进行去重、去偶数,然后查找最大值importjava.util.Arrays;importjava.util.Comparator;publicclassStream1publicstaticvoidmain(Stringargs)intmaxA
Wesley13 Wesley13
3年前
Java Stream
1Stream简介Stream是数据渠道,用于操作数据源(集合,数组等)所生成得元素序列。而集合讲得是数据,流讲得是计算。注意:Stream自己不会存储元素。Stream不会改变源对象。相反,它会返回一个持有结果得新StreamStream操作时延迟执行得,这意味着它们会等到需要结果时才执
Wesley13 Wesley13
3年前
JDK1.8 之Stream API总结
Stream是Java8新增加的类,用来补充集合类。Stream代表数据流,流中的数据元素的数量可能是有限的,也可能是无限的。Stream和其它集合类的区别在于:其它集合类主要关注与有限数量的数据的访问和有效管理(增删改),而Stream并没有提供访问和管理元素的方式,而是通过声明数据源的方式,利用可计算的操作在数据源上执行,当然
Wesley13 Wesley13
3年前
Java8系列之Stream总结
流的简介  官方解释,Stream是Java8的一大亮点,它与java.io包里的InputStream和OutputStream是完全不同的概念。它也不同于StAX对XML的解析的Stream,也不是AmazonKinesis对大数据实时处理的Stream。它是对集合对象功能的增强,她专注于对集合对象进行各种非常便利、高效的聚合操作(ag
Wesley13 Wesley13
3年前
Java学习:Stream流式思想
Stream流Java8API添加了一种新的机制——Stream(流)。Stream和IO流不是一回事。流式思想:像生产流水线一样,一个操作接一个操作。使用Stream流的步骤:数据源→转换成流→操作1→操作2→……数据源(source):可以是集合、数组等。St
Wesley13 Wesley13
3年前
JDK8之lambda表达式
/JDK8Stream特性Createdbychengbxon2018/5/27.Java8中的Stream是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregateoperation),或者大批量数据操
Wesley13 Wesley13
3年前
Java 8新特性之Stream 概念
Java8中有两大最为重要的改变。第一个是Lambda表达式;另外一个则是StreamAPI(java.util.stream.\)。Stream是Java8中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用StreamAPI对集合数据进行操作,就类似于使用SQL执行
Wesley13 Wesley13
3年前
Java8 新特性之集合操作Stream
Java8新特性之集合操作StreamStream简介Java8引入了全新的StreamAPI。这里的Stream和I/O流不同,它更像具有Iterable的集合类,但行为和集合类又有所不同。stream是对集合对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作,或者大批量数据操作。
Wesley13 Wesley13
3年前
Java 8 stream 实战
概述平时工作用python的机会比较多,习惯了python函数式编程的简洁和优雅。切换到java后,对于数据处理的『冗长代码』还是有点不习惯的。有幸的是,Java8版本后,引入了Lambda表达式和流的新特性,当流和Lambda表达式结合起来一起使用时,因为流申明式处理数据集合的特点,可以让代码变得简洁易读。幸福感爆棚,有没有!本文主要列举一些
Wesley13 Wesley13
3年前
Java8 数据流
一、基本知识\\数据流(stream)\\是对集合(collection)功能的增强,更专注于对集合对象的各种便利、高效的聚合,大批量数据操作。数据流的特点:元素序列流提供了一组特定类型的以顺序方式元素。源流使用集合,数组或I/O资源为输入源。聚合操作数据流支持如filter
Wesley13 Wesley13
3年前
Java 8 Stream API学习总结
Java8API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。StreamAPI可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。这种风格将要处理的元素集合看作一种流,流在管道中传输,并且可以在管道的节点上进行处理,比如筛选,排序,聚合等。元素流在管道中经过中间操作(intermediateo