Stream流是用于对数组和集合进行便捷操作的。
学习Stream流的步骤:获取Stream流,Stream流常见的中间方法,Stream流常见的终结方法。
Set> entries = hashMap.entrySet(); Stream > stream2 = entries.stream();
中间方法指的是调用完流之后其结果是一个新的流,还可以继续调用方法,这样一来就可以支持链式编程。
调用中间方法时,一定要连续调用,否则会抛出IllegalStateException异常

peek方法不改变流的元素,只是对流中的元素进行操作,然后将流传递给下一个动作。
peek是惰性的,只有在最终操作(forEach,collect,count等)被调用时才会执行。


终结方法不能连续调用,因为此时流已经关闭。
Collectors.toList( ):将Stream流中的元素累计到一个List集合中然后返回
Collectors.toSet( ):将Stream流中的元素累计到一个Set集合中然后返回
- public static void main(String[] args) {
- List
names = new ArrayList<>(); - Collections.addAll(names,"张无忌","张三丰","周芷若","张强","赵敏");
- System.out.println(names);
- //找到所有姓张的,且只有三个字
- List
threeName = new ArrayList<>(); - names.forEach(s -> {
- if(s.startsWith("张") && s.length() == 3){
- threeName.add(s);
- }
- });
- System.out.println(threeName);
-
- HashSet
hashSet = new HashSet<>(); - //List集合的stream流
- Stream
stream = names.stream(); - //Sset集合的stream流
- Stream
stream1 = hashSet.stream(); - HashMap
hashMap = new HashMap<>(); - //Map集合的stream流,需要用存放键值对的entrySet
- Set
> entries = hashMap.entrySet(); - Stream
> stream2 = entries.stream(); - String[] strings = {"1","2","3","4"};
- //数组获取流的方法
- Stream
stream3 = Arrays.stream(strings); - stream3.filter(new Predicate
() { - @Override
- public boolean test(String s) {
- //s是stream流里面的元素
- System.out.println(s);
- return s.startsWith("张") && s.length() == 3;
- }
- });
- //stream是获取的流对象,filter中间添加了过滤条件,collect终结方法,流式编程(链式编程)
- Set
set = stream.filter(s -> s.startsWith("张") && s.length() == 3).collect(Collectors.toSet()); - System.out.println(set);
- }