ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Stream API

2022-06-24 18:36:10  阅读:151  来源: 互联网

标签:map Stream stream getName 元素 list API


Stream API

一.创建Stream

//1.Colleaction系列集合提供
List<String> list = new ArrayList<>();
Stream<String> stream = list.stream();

//2.Arrays的静态方法stream();
Employee[] emps = new Employee[10];
Stream<String> stream = Arrays.stream(array);

//3.通过Stream.of
Stream<String> stream = Stream.of("aaa","bbb","ccc");

//4.创建无线流

Stream<Integer> stream = Stream.iterate(0,(x) -> x+2);

二.中间操作

中间操作不会执行任何操作,只有出现终止操作才会一次性执行全部内容,即:“惰性求值”

1.filter()过滤

过滤条件

2.limit(Long maxnum)

限制个数

出现短路,限制出现俩条之间进行短路不进行迭代操作,提高了效率

3.skip()和limit互补跳过

4.去重distinct,通过hashcode和equals方法

5.映射

map接收一个Lambda,将元素转换为其他形式,或提取信息。

接收一个函数作为参数,该函数还会应用到每个元素上,并将其映成一个新的元素。

flatMap 接收一个函数作为参数,将流中的每个值都换成另一个流,然后把所有流连成一个流

类比add(),addAll()两个方法

list.stream()
    .map((str) -> str.toUpperCase())
    .forEach(System.out::println);

employeeList.stream
    .map(Employee::getName)
    .forEach(System.out::println);


6.排序

sorted(Comparable自然排序)

sorted(Comparator com)(Comparator 定制排序)

//先按年龄排,年龄相同按姓名排
employees.stream()
    .sorted((e1,e2) -> {
        if(e1.getAge().equals(e2.getAge())){
            return e1.getName().comparaTo(e2.getName());
        }else{
            return e1.getAge().comparaTo(e2.getAge());
        }
    }).forEach(System.out::println);

三.终止操作

查找与匹配

1.allMatch();检查是否匹配所有元素

2.anyMatch();检查是否至少匹配一个元素

3.noneMatch();检查没有匹配所有元素

4.findFrist()返回第一个,返回Optional

5.findany返回任意一个,返回Optional

6.count返回总个数

7.max(comparator)返回最大值

8.min(comparator)返回最小值

Optional是有可能为空的一个封装容器类,解决空指针问题,有一个op.orElse()如果为空就应用这个orelse()进行替代,避免空指针

归约

将流中元素反复结合起来得到一个值

identity起始值

binaryOperator

1.reduce()

map-reduce

收集

Collector

Collectors工具类

List<String> list = employees.stream()
    .map(employee::getName)
    .collect(Collectors.toList());

标签:map,Stream,stream,getName,元素,list,API
来源: https://www.cnblogs.com/Arborblog/p/16409881.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有