资讯专栏INFORMATION COLUMN

Stream API和Optional类学习笔记

geekidentity / 2690人阅读

摘要:用于对流进行排序。三最终操作用于迭代流中的每个元素,并执行相应的操作。类类也是的新特性,用于有效解决问题。与的功能一样,不过接受一个函数式接口来生成对象为空则抛出异常与使用类似与使用类似这是一种级联的方式,能够解决方式的嵌套问题。

Stream API

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

一、Stream流的创建

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

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

2、使用stream来创建

Stream stream = Stream.of("hushucheng", "hufanqie", "hututu", "marong", "marongrong");
二、中间操作

1、filter
用法如下:

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

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

2、map
用法如下:

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

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

3、limit
用法如下:

        List 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 strings = Arrays.asList(1, 3, 3, 2, 5, 4);
        strings.stream().sorted().forEach(System.out::println);

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

三、最终操作

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

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

List 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 s1 = Optional.empty();

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

Optional s2 = Optional.of("marong");

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

Optional s3 = Optional.ofNullable("marongrong");
二、常用方法

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

2、orElseorElseThroworElseGet
(1) orElse

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

(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...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/75255.html

相关文章

  • 《Java8实战》-第五章读书笔记(使用流Stream-01)

    摘要:跳过元素流还支持方法,返回一个扔掉了前个元素的流。归约到目前为止,我们见到过的终端操作都是返回一个之类的或对象等。这样的查询可以被归类为归约操作将流归约成一个值。通过反复使用加法,你把一个数字列表归约成了一个数字。 使用流 在上一篇的读书笔记中,我们已经看到了流让你从外部迭代转向内部迭代。这样,你就用不着写下面这样的代码来显式地管理数据集合的迭代(外部迭代)了: /** * 菜单 ...

    OldPanda 评论0 收藏0
  • Java8学习小记

    摘要:但有一个限制它们不能修改定义的方法的局部变量的内容。如前所述,这种限制存在的原因在于局部变量保存在栈上,并且隐式表示它们仅限于其所在线程。 2014年,Oracle发布了Java8新版本。对于Java来说,这显然是一个具有里程碑意义的版本。尤其是那函数式编程的功能,避开了Java那烦琐的语法所带来的麻烦。 这可以算是一篇Java8的学习笔记。将Java8一些常见的一些特性作了一个概要的...

    CHENGKANG 评论0 收藏0
  • 《Java8实战》-第五章读书笔记(使用流Stream-02)

    摘要:第三个问题查找所有来自于剑桥的交易员,并按姓名排序。第六个问题打印生活在剑桥的交易员的所有交易额。第八个问题找到交易额最小的交易。 付诸实战 在本节中,我们会将迄今学到的关于流的知识付诸实践。我们来看一个不同的领域:执行交易的交易员。你的经理让你为八个查询找到答案。 找出2011年发生的所有交易,并按交易额排序(从低到高)。 交易员都在哪些不同的城市工作过? 查找所有来自于剑桥的交易...

    liangzai_cool 评论0 收藏0
  • 《java 8 实战》读书笔记 -第五章 使用流

    摘要:比如,你可以建立一个,选出热量超过卡路里的头三道菜请注意也可以用在无序流上,比如源是一个。跳过元素流还支持方法,返回一个扔掉了前个元素的流。一般来说,应该使用来对这种流加以限制,以避免打印无穷多个值。 一、筛选和切片 1.用谓词筛选 Streams接口支持filter方法。该操作会接受一个谓词(一个返回boolean的函数)作为参数,并返回一个包括所有符合谓词的元素的流。例如筛选出所有...

    Richard_Gao 评论0 收藏0
  • Java8新特性总览

    摘要:新特性总览标签本文主要介绍的新特性,包括表达式方法引用流默认方法组合式异步编程新的时间,等等各个方面。还有对应的和类型的函数连接字符串广义的归约汇总起始值,映射方法,二元结合二元结合。使用并行流时要注意避免共享可变状态。 Java8新特性总览 标签: java [TOC] 本文主要介绍 Java 8 的新特性,包括 Lambda 表达式、方法引用、流(Stream API)、默认方...

    mayaohua 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<