Stream流是自jdk1.8起才有的一个抽象类,属于管道流,即为流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。
其中有一些和集合,数组相关的方法。
下面来示范Stream流的静态方法of和stream()(创建流),skip(),concat(),map(),limit(),filter()方法(转换流)(这些可称为延迟方法)count(),foreach方法(这二者可称为终结方法)
Stream流有延迟方法和终结方法(例如foreach,count方法等为终结方法),流调用完延迟方法可以继续用流调用方法,而终结方法反之
import java.util.*;
import java.util.stream.Stream;
//stream流属于管道流,且只能使用一次,使用完后该流回自动关闭,不能再调用方法
public class steam {
public static void main(String[] args) {
ArrayList<String> l = new ArrayList<>();
l.add("流星");
l.add("流眼泪");
l.add("刘型");
l.add("留下");
Stream<String> ed = l.stream();
long count = ed.count();//stream流的count方法相当于集合size方法计算元素的个数
System.out.println(count);
l.stream().filter((name)->name.startsWith("流"))//Stream的filter方法是留下指定条件的数据,作用为过滤
.filter((name)->name.length()==2||name.length()==3) //这里用了lambda表达式进行了简化代码(下同),而filter方法传的是predicate一种常见的函数式接口,其返回一个Boolean值
.forEach(name-> System.out.println(name));//foreach方法不同于for循环中的for-each,这里用于遍历流中的数据
这里的foreach方法传递Consumer一个函数式接口(一次性消费数据)
该段代码可用于筛选集合或数组具有特定条件的元素
**concat方法**
```c
ArrayList<String> l12 = new ArrayList<>();
l12.add("流星");
l12.add("流眼泪");
l12.add("刘型");
l12.add("留下");
Stream<String> ed1 = l12.stream();
ArrayList<String> jss = new ArrayList<>();
jss.add("1");
jss.add("2");
jss.add("3");
jss.add("5");
Stream<String> dw = jss.stream();
Stream.concat(dw,ed1).forEach(se-> System.out.println(se));//concat方法用于合并流
map,skip方法
ArrayList<String> j = new ArrayList<>();
j.add("1");
j.add("2");
j.add("3");
j.add("5");
Stream<String> s = j.stream();
Stream<Integer> integerStream = s.map((String f) -> { //map方法里面传的参数是Function函数式接口,用于改变参数的类型,这里将String类型参数改为Integer类型
return Integer.parseInt(f);
});
Stream<Integer> integerStream1 = integerStream.skip(2);//skip方法为跳过前n个元素截取后面的元素变成一个新流
integerStream1 .forEach(integer -> System.out.println(integer));
Stream<String> l1 = l.stream();//所有Collection集合(即所有单例集合不包括map集合)都可以通过stream方法将集合转换成Stream流
Map<String, String> s1 = new HashMap<>();
Set<String> s2 = s1.keySet();//map集合的键可通过keyset方法变成set集合
Stream<String> s3 = s2.stream();
Collection<String> s4 = s1.values();//map集合的值可通过values方法变成Collection集合
Stream<String> s5 = s4.stream();
Set<Map.Entry<String, String>> s6 = s1.entrySet();//map集合可通过entryset方法将键值对转换成set集合
Stream<Map.Entry<String, String>> s7 = s6.stream();
String a[]={ "1","ssds","fsf"};//对于其他类型的数组可通过调用Stream的静态方法of里面传各种数组最终转换成Stream流
Stream<String> a1 = Stream.of(a);
Integer b[]={ 1,3,5,6,76};
Stream<Integer> b1 = Stream.of(b);
}
}
该段代码为常见集合和数组转换成Stream流的常用方法