钜形不锈钢水箱 发表于 2022-8-9 14:44:06

Stream API

Stream API

一.创建Stream

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

//2.Arrays的静态方法stream();
Employee[] emps = new Employee;
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());
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: Stream API