Stream流
用于解决已有集合类库既有的弊端。
循环遍历的弊端
例:进行如下操作
-
首先筛选所有姓张的人;
-
然后筛选名字有三个字的人;
-
最后进行对结果进行打印输出。
总是需要进行循环、循环、再循环 循环是做事情的方式,而不是目的。另一方面,使用线性循环就意味着只能遍历一次。如果希望再次遍历,只能再使用另一个循环从头开始。代码如下:
public class Demo11NormalFilter {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("周芷若");
list.add("赵敏");
list.add("张强");
list.add("张三丰");
List<String> zhangList = new ArrayList<>();
for (String name : list) {
if (name.startsWith("张")) {
zhangList.add(name);
}
}
List<String> shortList = new ArrayList<>();
for (String name : zhangList) {
if (name.length() == 3) {
shortList.add(name);
}
}
for (String name : shortList) {
System.out.println(name);
}
}
}
Stream写法代码如下:
public class Demo12StreamFilter {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("周芷若");
list.add("赵敏");
list.add("张强");
list.add("张三丰");
list.stream()
.filter(s -> s.startsWith("张"))
.filter(s -> s.length() == 3)
.forEach(s -> System.out.println(s));
}
}
直接阅读代码的字面意思即可完美展示无关逻辑方式的语义:获取流、过滤姓张、过滤长度为3、逐一打印。代码中并没有体现使用线性循环或是其他任何算法进行遍历。
Stream流式思想类似于工厂车间的“生产流水线”,Stream流不是一种数据结构,不保存数据,而是对数据进行加工 处理。Stream可以看作是流水线上的一个工序。在流水线上,通过多个工序让一个原材料加工成一个商品。
获取流方式
public class Demo3_Stream {
public static void main(String[] args) {
//list--->Stream
List<String> list = new ArrayList<>();
Stream<String> stream = list.stream();
//set---->Stream
Set<String> set = new HashSet<>();
Stream<String> stream1 = set.stream();
//Map--->Stream
Map<Integer,String> map = new HashMap<>();
Set<Map.Entry<Integer, String>> entries = map.entrySet();
Stream<Map.Entry<Integer, String>> stream2 = entries.stream();
//数组----->Stream
String[] arr= new String[6];
Stream<String> arr1 = Stream.of(arr);
//Integer--->Stream
Integer[] arr2 = new Integer[5];
Stream<Integer> arr21 = Stream.of(arr2);
}
}