1.forEach(最终方法 执行方法)
forEach接收消费类型的函数式接⼝,为Stream流的最终⽅法,调⽤后不能再调⽤Stream流的其它⽅法了
若只有⼀个参数则可以省略()
参数的类型也可省略,java编译器会⾃动推断参数类型
若⽅法体只有⼀⾏代码则可以省略{}
List<String> list1 = new ArrayList<>();list1.add("aa");list1.add("bb");list1.add("cc");list1.add("dd");list1.add("ee");list1.stream().forEach(a ->{System.out.println(a);});
2.filter(过滤)
过滤,延迟⽅法,接收判断类型的函数式接⼝,产⽣新的⼦集流,调⽤后还可以继续调⽤其它的Stream流⽅法
若写了{}则必须⽤return返回结果
若省略了{}则不需要return返回结果
List<String> list2 = new ArrayList<>();list2.add("AA");list2.add("BB");list2.add("CC");list2.add("DD");list2.add("EE");list2.stream().filter(a -> {return !a.equals("AA");}).forEach(a->{System.out.println(a);});
3.collect(生成list或者map)
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
List<String> list2 = new ArrayList<>();list2.add("AA");list2.add("BB");list2.add("CC");list2.add("DD");list2.add("EE");Map<String, String> aa = list2.stream().filter(a -> {return !a.equals("AA");}).collect(Collectors.toMap(key -> {list5.add(key);list6.add(key);return key;}, value -> {return "11";}));List<String> list = list2.stream().collect(Collectors.toList())
4.map(映射新的stream流)
延迟⽅法,操作Stream流数据中的每个元素,将Stream流映射到⼀个新的Stream流上
操作数据中的每个元素,改变该元素的值或者类型等等
List<String> list1 = new ArrayList<>();list1.add("aa");list1.add("bb");list1.add("cc");list1.add("dd");list1.add("ee");list1.stream().map(a->{return a+="111";}).forEach(a->{System.out.println(a);});
5.count(最终方法,计算stream长度)
最终⽅法,没有参数,没有⽅法体,属于Stream流的最终⽅法,⽤于统计Stream流中的数据长度,返回long类型
List<String> list1 = new ArrayList<>();list1.add("aa");list1.add("bb");list1.add("cc");list1.add("dd");list1.add("ee");long count = list1.stream().count();System.out.println(count);
6.limit(截取流中前几个元素)
延迟⽅法,截取Stream流中的前⼏个元素返回新的Stream流,⼊参为long类型,没有⽅法体
若⼊参的值⼤于Stream流中的数据的长度则返回由原数据组成的新Stream流
List<String> list1 = new ArrayList<>();list1.add("aa");list1.add("bb");list1.add("cc");list1.add("dd");list1.add("ee");list1.stream().limit(3).forEach(a->{System.out.println(a);});
7.skip(去掉流中前几个元素)
延迟⽅法,⼊参为long类型,没有⽅法体,跳过前⼀个Stream流的前⼏个元素,得到由后⾯的元素组成的新Stream流
List<String> list1 = new ArrayList<>();list1.add("aa");list1.add("bb");list1.add("cc");list1.add("dd");list1.add("ee");list1.stream().skip(2).forEach(a->{System.out.println(a+"---");});
8.concat(合并流)
Stream的静态⽅法,将多个Stream流的数据按⼊参顺序合并为⼀个新的Stream流
List<String> list1 = new ArrayList<>();list1.add("aa");list1.add("bb");list1.add("cc");list1.add("dd");list1.add("ee");List<String> list2 = new ArrayList<>();list2.add("AA");list2.add("BB");list2.add("CC");list2.add("DD");list2.add("EE");Stream.concat(list1.stream(),list2.stream()).forEach(a->{System.out.println(a+"****");});
9.distinct(流去重)
distinct()使用hashCode()和equals()方法来获取不同的元素。
因此,我们的类必须实现hashCode()和equals()方法。
List<String> list1 = new ArrayList<>();list1.add("aa");list1.add("bb");list1.add("aa");list1.add("cc");list1.add("dd");list1.add("ee");list1.stream().distinct().forEach(a->{System.out.println(a+"+++++++");});
10.max(一定规则取最大)
根据提供的 Comparator返回此流的最大元素。
List<String> list1 = new ArrayList<>();list1.add("aa1111");list1.add("bb");list1.add("aa");list1.add("cc");list1.add("dd");list1.add("ee");Optional<String> max = list1.stream().max(Comparator.comparing((p -> (p.length()))));System.out.println(max);
11.sorted(自然序排序)
返回由此流的元素组成的流,根据自然顺序排序。
List<String> list1 = new ArrayList<>();list1.add("aa1111");list1.add("bb");list1.add("aa");list1.add("cc");list1.add("dd");list1.add("ee");list1.stream().sorted().forEach(a->{System.out.println(a);});
