一、什么是Stream流
用于简化集合和数组,引入lambda表达式,带来函数式编程。
String的体验:
public class Demo{
public static void main(String[] args){
List<String> list = new ArrayList<>();
list.add("小白");
list.add("小黑");
list.add("大黄");
list.add("小兰");
// 把集合中所有以”张“开头的元素存储到一个新的集合。
//把张开头的集合中的长度为3的元素存储到一个新的集合
//遍历上一步得到的集合中的元素
//使用Stream
//第一种
list.stream().filter(new Predicate<String>(){
@Override
public boolean test(String s){
return s.startWith("小");
}
}).forEach(s-> System.out.println(s));
//第二种
list.stream().filter(s->s.startsWith("小")).filter(s->s.length()==3).forEach(s->System.out.println(s));)
}
}
//其中filter()是从对象集合中过滤出某些元素
Stream的核心思想:
1.先得到集合或者数组的Stream流对象
2.将元素放进去
3.然后用Stream流简化的API来操作元素
二、Stream流的获取
Stream流的三类方法
获取Stream流
中间方法
终结方法
获取Stream流的方式:
通过Collection接口中的默认方法
default Stream<E> | stream( ) | 返回以此集合为源的顺序stream |
通过Arrays(数组)工具类中提供的方法
Map集合 间接的通过keySet 或者 entitySet
Collection<String> c = new ArryList<>();
Stream<String> s = c.stream();
Map<String,Integer> map = new HashMap<>();
//键的stream流
Stream<String> keyStream = map.keySet().stream();
//值的stream流
Stream<Integer> valStream = map.valSet().stream();
//键值对流
Stream<Map.Entry<String,Integer>> entryStream = map.entrySet().stream();
String[] names = {"小白","小黑"};
Stream<String> arrStream = Arrays.stream(names);
Stream<String> arrStream2 = Stream.of(names);
中间方法
中间方法又称 非终结方法,调用完之后,返回新的stream可以继续使用,支持链式编程
在使用Stream流的过程中,无法直接修改集合、数组中的元素
Stream流常用的API
终结方法
终结方法调用完之后无法继续使用,原因在于返回的不是stream流了
三、收集Stream流
作用:将Stream流操作后的结果转会到集合或者数组中去
Stream流的收集方法:
Collectors工具类提供的收集方法
收集Stream流:
List<String> list = new ArrayList<>();
list.add("小白");
list.add("小白");
list.add("小黑");
list.add("大黄");
list.add("小兰");
Stream<String> s1 = list.stream().filter((s->s.startWith("小")));
//将处理后的流收集成一个集合
List<String> xiaoList = s1.collect(Collectors.toList());//可变集合
xiaoList。add("java");
System.out.println(xiaoList);
//注意 “流只能使用一次”
Stream<String> s2 = list.stream().filter((s->s.startsWith("小")));
Set<String > xiaoSet = s2.collect(Collectors.toSet());
System.out.println(xiaoSet);
// object[] arr = s2.toArray();
// System.out.pritln(arr);