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);
});