1.forEach(最终方法 执行方法)

forEach接收消费类型的函数式接⼝,为Stream流的最终⽅法,调⽤后不能再调⽤Stream流的其它⽅法了
若只有⼀个参数则可以省略()
参数的类型也可省略,java编译器会⾃动推断参数类型
若⽅法体只有⼀⾏代码则可以省略{}

  1. List<String> list1 = new ArrayList<>();
  2. list1.add("aa");
  3. list1.add("bb");
  4. list1.add("cc");
  5. list1.add("dd");
  6. list1.add("ee");
  7. list1.stream().forEach(a ->{
  8. System.out.println(a);
  9. });

2.filter(过滤)

过滤,延迟⽅法,接收判断类型的函数式接⼝,产⽣新的⼦集流,调⽤后还可以继续调⽤其它的Stream流⽅法
若写了{}则必须⽤return返回结果
若省略了{}则不需要return返回结果

  1. List<String> list2 = new ArrayList<>();
  2. list2.add("AA");
  3. list2.add("BB");
  4. list2.add("CC");
  5. list2.add("DD");
  6. list2.add("EE");
  7. list2.stream().filter(a -> {
  8. return !a.equals("AA");
  9. }).forEach(a->{
  10. System.out.println(a);
  11. });

3.collect(生成list或者map)

  1. stream.collect() 的本质由三个参数构成,<br /> 1. Supplier 生产者, 返回最终结果<br /> 2. BiConsumer<R, ? super T> accumulator 累加器<br /> 第一个参数是要返回的集合, 第二个参数是遍历过程中的每个元素,<br /> 将流中每个被遍历的元素添加到集合中<br /> 3. BiConsumer<R, R> combiner 合并器, 在有并行流的时候才会有用, 一个流时代码不会走到这里<br /> 将第二步遍历得到的所有流形成的list都添加到最终的list中,<br /> 最后返回list1
  1. List<String> list2 = new ArrayList<>();
  2. list2.add("AA");
  3. list2.add("BB");
  4. list2.add("CC");
  5. list2.add("DD");
  6. list2.add("EE");
  7. Map<String, String> aa = list2.stream().filter(a -> {
  8. return !a.equals("AA");
  9. }).collect(Collectors.toMap(key -> {
  10. list5.add(key);
  11. list6.add(key);
  12. return key;
  13. }, value -> {
  14. return "11";
  15. }));
  16. List<String> list = list2.stream().collect(Collectors.toList())

4.map(映射新的stream流)

延迟⽅法,操作Stream流数据中的每个元素,将Stream流映射到⼀个新的Stream流上
操作数据中的每个元素,改变该元素的值或者类型等等

  1. List<String> list1 = new ArrayList<>();
  2. list1.add("aa");
  3. list1.add("bb");
  4. list1.add("cc");
  5. list1.add("dd");
  6. list1.add("ee");
  7. list1.stream().map(a->{
  8. return a+="111";
  9. }).forEach(a->{
  10. System.out.println(a);
  11. });

5.count(最终方法,计算stream长度)

最终⽅法,没有参数,没有⽅法体,属于Stream流的最终⽅法,⽤于统计Stream流中的数据长度,返回long类型

  1. List<String> list1 = new ArrayList<>();
  2. list1.add("aa");
  3. list1.add("bb");
  4. list1.add("cc");
  5. list1.add("dd");
  6. list1.add("ee");
  7. long count = list1.stream().count();
  8. System.out.println(count);

6.limit(截取流中前几个元素)

延迟⽅法,截取Stream流中的前⼏个元素返回新的Stream流,⼊参为long类型,没有⽅法体
若⼊参的值⼤于Stream流中的数据的长度则返回由原数据组成的新Stream流

  1. List<String> list1 = new ArrayList<>();
  2. list1.add("aa");
  3. list1.add("bb");
  4. list1.add("cc");
  5. list1.add("dd");
  6. list1.add("ee");
  7. list1.stream().limit(3).forEach(a->{
  8. System.out.println(a);
  9. });

7.skip(去掉流中前几个元素)

延迟⽅法,⼊参为long类型,没有⽅法体,跳过前⼀个Stream流的前⼏个元素,得到由后⾯的元素组成的新Stream流

  1. List<String> list1 = new ArrayList<>();
  2. list1.add("aa");
  3. list1.add("bb");
  4. list1.add("cc");
  5. list1.add("dd");
  6. list1.add("ee");
  7. list1.stream().skip(2).forEach(a->{
  8. System.out.println(a+"---");
  9. });

8.concat(合并流)

Stream的静态⽅法,将多个Stream流的数据按⼊参顺序合并为⼀个新的Stream流

  1. List<String> list1 = new ArrayList<>();
  2. list1.add("aa");
  3. list1.add("bb");
  4. list1.add("cc");
  5. list1.add("dd");
  6. list1.add("ee");
  7. List<String> list2 = new ArrayList<>();
  8. list2.add("AA");
  9. list2.add("BB");
  10. list2.add("CC");
  11. list2.add("DD");
  12. list2.add("EE");
  13. Stream.concat(list1.stream(),list2.stream()).forEach(a->{
  14. System.out.println(a+"****");
  15. });

9.distinct(流去重)

distinct()使用hashCode()和equals()方法来获取不同的元素。
因此,我们的类必须实现hashCode()和equals()方法。

  1. List<String> list1 = new ArrayList<>();
  2. list1.add("aa");
  3. list1.add("bb");
  4. list1.add("aa");
  5. list1.add("cc");
  6. list1.add("dd");
  7. list1.add("ee");
  8. list1.stream().distinct().forEach(
  9. a->{
  10. System.out.println(a+"+++++++");
  11. }
  12. );

10.max(一定规则取最大)
根据提供的 Comparator返回此流的最大元素。

  1. List<String> list1 = new ArrayList<>();
  2. list1.add("aa1111");
  3. list1.add("bb");
  4. list1.add("aa");
  5. list1.add("cc");
  6. list1.add("dd");
  7. list1.add("ee");
  8. Optional<String> max = list1.stream().max(Comparator.comparing((p -> (p.length()))));
  9. System.out.println(max);

11.sorted(自然序排序)

返回由此流的元素组成的流,根据自然顺序排序。

  1. List<String> list1 = new ArrayList<>();
  2. list1.add("aa1111");
  3. list1.add("bb");
  4. list1.add("aa");
  5. list1.add("cc");
  6. list1.add("dd");
  7. list1.add("ee");
  8. list1.stream().sorted().forEach(a->{
  9. System.out.println(a);
  10. });