zoukankan      html  css  js  c++  java
  • java StreamAPI

    一:创建Stream

    1、创建Stream的几种方式

      1)将数组转成Stream。Stream<Integer>  stream = Arrays.stream(new Integer[]{1,2,3,4,5,6,7});

      2)通过Stream的静态方法。Stream<String> stream = Stream.of("aaa","bbb","ccc");

      3)Collection对象的stream()或parallelStream()方法

    二: 中间操作

    1、筛选与切片

      1)filter: 从流中排除某些元素

        filter(x -> x>5)

      2)limit:截断流,截断N后面的元素,使元素不超过给定数量

        limit(N)

      3)skip:跳过前N个元素,只返回N后面的元素

        skip(N)

      4)distinct:根据hash和equals去重

    2、映射

      1)map:函数被应用到每个元素上,并将其映射成一个新的元素

    listA.stream().filter(Objects::nonNull).distinct().limit(3)
                    .map(String::toUpperCase).forEach(System.out::println);

      2)flatMap:将流中的每个值都换成另一个流,然后把所有流连接一个流

    listA.stream().filter(Objects::nonNull).distinct().limit(3)
                    .flatMap(x->{
                        return Stream.of(x.split(""));
                    }).forEach(System.out::println);

    3、排序

      1)sorted() 自然排序

      2)sorted(Comparator) 按排序器进行排序

    listA.stream().filter(Objects::nonNull).distinct().limit(3)
                    .map(String::toUpperCase).sorted((o1,o2)->o1.equals(o2)?-1:1).forEach(System.out::println);

    三:终止操作

    1、查找与匹配

      1)allMatch: 检查所有元素都匹配条件,匹配则返回true

      2)anyMatch:检查至少有一个满足条件,有一个满足,则返回true

      3)noneMatch:是否所有都不匹配,返回true

      4)findFirst:只返回第一个元素。    Optional<Integer> result = list.stream().findFirst();

      5)findAny:返回当前流中的任意一元素。与findFirst的区别是什么?

      6)count:返回流中元素的总数

      7)max:返回流中最大值。需要传比较器。  Optional<Integer> result = list.stream().max(Integer::compareTo);

      8)min:返回流中最小值。需要传比较器。

      9)forEach:遍历流中元素

    2、归约

      1)reduce(T identity,BinaryOperator)   可以将流中元素反复结合起来得到一个值,返回T。identity表示初始值

      2)reduce(BinaryOpreator)  可以将流中元素反复结合起来,返回Optional< T >    Optional<Integer> result = list.stream().reduce((x,y)->x+y);

    3、收集

      1)根据名称生成一个新的List

    List<String> result = list.stream().map(User::getUsername).collect(Collectors.toList());

      2)根据名称生成一个新的Set

    Set<String> result = list.stream().map(User::getUsername).collect(Collectors.toSet());

      3)根据名称生成一个新的HashSet

    HashSet<String> result = list.stream().map(User::getUsername).collect(Collectors.toCollection(HashSet::new));

      4)分组,按年龄分组

    Map<Integer,List<User>> result = list.stream().collect(Collectors.groupingBy(User::getAge));
    结果:
    16=[com.hsha.User@5698305c, com.hsha.User@67dba2e7] 17=[com.hsha.User@75d64c97] 18=[com.hsha.User@6c99b336, com.hsha.User@6b71333a]

      5)连接,需指定要连接的内容及连接符

    String result = list.stream().map(User::getUsername).collect(Collectors.joining("--"));

    参考:https://blog.csdn.net/ycj_xiyang/article/details/83624642

  • 相关阅读:
    python json 和 pickle的补充 hashlib configparser logging
    go 流程语句 if goto for swich
    go array slice map make new操作
    go 基础
    块级元素 行内元素 空元素
    咽炎就医用药(慢性肥厚性咽炎)
    春季感冒是风寒还是风热(转的文章)
    秋季感冒 咳嗽 怎么选药
    解决IE浏览器“无法显示此网页”的问题
    常用的 css 样式 记录
  • 原文地址:https://www.cnblogs.com/aligege/p/13984381.html
Copyright © 2011-2022 走看看