获取 Stream流的两种方式
目标
掌握根Collection获取流。
掌握Stream中的静态方法of获取流
java.util.stream.Stream 是JDK 8新加入的流接口
获取一个流非常简单,有一下几种常用的方式:
所有的Collection集合都可以通过stram默认方法获取流
Stream接口的静态方法of可以获取相对应的流
方式1:根据Collection获取流
首先,java.util.Collection接口中加入了default方法 stream 用来获取流,所以其所有实现类均可获取流。
public interface Collection {
default Stream<E> stream()
}
public class StreamTest02 {
public static void main(String[] args) {
//集合获取流
//Collection接口中的方法:default Stream<E> stream() 获取流
List<String> list = new ArrayList<>();
Stream<String> stream01 = list.stream();
Set<String> set = new HashSet<>();
Stream<String> stream02 = set.stream();
Vector<String> vector = new Vector<>();
Stream<String> stream03 = vector.stream();
}
}
java.util.Map接口不是Collection的子接口,所以获取对应的流需要分Key,value或者entry等情况:
//Map获取流
Map<String,String> map = new HashMap<>();
//通过key获取Stream流
Stream<String> stream001 = map.keySet().stream();
//通过value获取Stream流
Stream<String> stream002 = map.values().stream();
//通过entry获取Stream流
Stream<Map.Entry<String,String>> stream003 = map.entrySet().stream();
方式2:Stream中的静态方法of获取流
由于数组对象不可能添加默认方法,所有Stream接口中提供了静态方法of,使用很简单:
public class StreamTest03 {
public static void main(String[] args) {
//Stream流中的静态方法:static Stream of(T... values)
Stream<String> stream01 = Stream.of("张三","李四");
//of方法的参数其实是一个可变参数,所以支持数组
String[] arr = {"aa","bb"};
Stream<String> stream02 = Stream.of(arr);
// 注意:基本数据类型的数组不行
int[] arr3 = {11, 22, 33};
Stream<int[]> stream9 = Stream.of(arr3);
}
小结
学习了两种获取流的方式:
1.通过Collection接口中的默认方法Stream stream()
2.通过Stream接口中的静态方法of方法
Stream常用方法和注意事项
目标:
了解Stream常用方法的分类
掌握Stream注意事项
Stream常用方法
Stream流模型的操作很丰富,这里介绍一些常用的API。这些方法可以被分成两种:
- 终结方法:返回值类型不再是stream类型的方法,不再支持链式调用。本次学习中,终结方法包括count和forEach方法
- 非终结方法:返回值类型仍然是stream类型的方法,支持链式调用。(除了终结方法外,其余方法均为非终结方法)
- 注:本文以外的更多方法请参考API文档
Stream注意事项(重要)
1.Stream只能操作一次
2.Stream方法返回的是新的流
3.Stream不调用终结方法的话,中间的操作是不会执行的。
Stream流的forEach方法
forEach用来遍历流中的数据。
void forEach(Consumer action);
该方法接受一个Consumer接口函,会将每一个流元素交给该函数处理。
例如:
public class StreamForEach {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
Collections.addAll(list,"张三","李四","王五","赵六");
list.stream().forEach(s -> System.out.println(s));
}
}