博客

  • https://blog.csdn.net/mu_wind/article/details/109516995

    Stream的使用

    sort+map+filter

    sort

  • 接收一个函数作为参数,这个函数被应用到两个元素的比较上,返回boolean

  • 不加reversed就是从小到大
    • .sorted(_Comparator._comparing(_ChargeData::getUnit).reversed())_
    • .sorted((_a,b) -> { xxx ; })_

map

  • 接收一个函数作为参数,这个函数会被应用到每个元素上,并将其映射为一个新的元素
    • 独取元素:houses.stream().map(_House::getNumber).collect(Collectors._toList());
    • 求和:nums.stream().mapToInt(_Integer::intValue).sum()_;

filter

  • 接收一个谓词(返回boolean的函数),返回一个包含所有符合谓词的元素的流
  • dataList.stream()
    .filter(_data ->data != null)
    .collect(Collectors._toList());

    查找+匹配

  • 返回boolean

    • anyMatch:流中是否有一个元素能匹配给定的谓词
    • allMatch:流中是否所有元素都能匹配给定的谓词
    • noneMatch:确保流中所有元素都不匹配给定谓词
  • 查找(无参)
    • findAny:返回当前流中的任意元素(优化)
    • findFirst:返回按顺序的第一个元素
  • 规约

    • reduce
      • 使用
        • 乘积:nums.stream().reduce(_1, (a, b) -> a * b)_;
        • 最小值:nums.stream().reduce(_Integer::_min);
      • 参数1:初始值(元素)
      • 参数2:将两个元素结合起来产生一个新值(函数)
    • 有趣的是map 和 reduce 可以连起来使用组成map-reduce模式,Google用它进行网络搜索而出名,并且很容易并行化

      收集数据

  • 分组收集

    • Map<_Integer, List<_Integer_>> collect = nums.stream().collect(Collectors._groupingBy(_Integer::intValue))_;
  • 连接字符串

    • 有分隔符:strs.stream().collect(_Collectors._joining(“,”));
    • 无分隔符:strs.stream().collect(_Collectors._joining());

      小工具

  • collect:用来最后收集流(常用Collectors.toList()

  • distinct:返回一个元素各异的流
  • limit(n):返回一个不超过给定长度的流(截取前几个,如果不够返回空流)
  • skip(n):返回一个扔掉了前n个元素的流
  • foreach(f):对流中的所有元素进行遍历,并对每个个体作为参数执行f函数
  • count():返回流中元素的个数
  • mapToInt():将流转换为intStream,使用max,min,average等方法前(可以使用boxed反转为流)

    小工具相关

    Optional

  • 用于优雅的解决空指针问题

  • 方法

    • get():获取对应的值,如果为空抛出异常
    • isPresent():为空返回false
    • orElse(b):为空返回b,否则返回值

      数字

  • BigDecimal

    • 四舍五入:b.setScale(2, BigDecimal.ROUND_HALF_UP)
  • Integer
    • 快捷创建集合:Arrays.asList(_1,2,3)_;
    • 随机数(0-100):(_int) (Math._random() * 100);
  • IntStream

    • 产生序列流:IntStream.range(_1,100)(包含1和100)_

    • 字符串

  • 快速创建集合(字符串可替换为数字):Arrays.asList(“asd”,”asd”);

容器

集合

  • subList(start,end)
    • 取出数据,含头不含尾,不会影响源数据,仅仅取出copy

  • Map