java知识学习47-Stream流


Stream流:可理解为一条流水线作业,期间要经过一些处理步骤后得到最终结果。它将函数式风格引入Java中。

  范例:

    /**
* 案例:
* 创建一个集合,存储多个字符串元素
* 把集合中所有以"张"开头的元素存储到一个新的集合
* 把"张"开头的集合中的长度为3的元素存储到一个新的集合
* 遍历上一步得到的集合
*/
public static void main(String[] args) {
// 普通方式编写的代码量很大,若再增加几个判断又得添加一堆代码
ArrayList list = new ArrayList<>();
list.add("爱丽丝");
list.add("张力");
list.add("是多少");
list.add("张望着");
list.add("地位");

ArrayList zhangList = new ArrayList<>();

for(String s : list) {
if (s.startsWith("张")) {
zhangList.add(s);
}
}
// System.out.println(zhangList);

ArrayList threeList = new ArrayList<>();

for(String ss : zhangList) {
if (ss.length() == 3) {
threeList.add(ss);
}
}
System.out.println(threeList);

// Stream流的方式来处理这个问题,逻辑简单且清晰,就是一条流水线
list.stream().filter(s -> s.startsWith("张")).filter(ss->ss.length()==3).forEach(sss-> System.out.println(sss));

Stream流的使用:

 

Stream流的生成方式:

   

Stream流的常见中间操作方法:

   

  Stream limit(long maxSizee):返回流中的指定的截取长度为maxSizee的数据。

  Stream skip(long n):跳过指定的长度为n的数据,返回剩下的数据组成的流。

  static Stream concat(Stream<? extends T> a, Stream<? extends T> b):将a和b两个流合并为一个流。

  Stream distinct():返回元素去重后的流(底层式根据Object.equals(Object)的方法)

    

  Stream sorted():流元素根据自然顺序排序。

  Stream sorted(Comparator c):流元素根据比较器Comparator进行排序。

    

  Stream map(Function mapper):返回由给定函数应用于此流的元素的结果组成的流。

  IntStream mapToInt(ToIntFunction mapper):返回一个IntStream其中包含将给定函数应用于此流的元素的结果。

    

Stream流的常见终结操作方法:

  void forEach(Consumer action):对此流的每个元素执行操作。

  long count():返回此流中的元素数 。

    

Stream流的收集操作:主要是为了把流的数据收集到集合中的操作。

  范例:

    

相关