Stream流

153 阅读1分钟

Stream流作用

结合了Lambda表达式,简化集合、数组的操作。

使用步骤

  • 得到一条Stream流水线,把数据放上去。
  • 利用Stream流的API进行操作
    • 中间方法
      • 过滤、转换
    • 终结方法
      • 收集(Collect)、打印(foreach)

获取流

单列集合

List.stream();

双列集合: 无法直接获取流

方式一:map.keySet().Stream() 流上放的是所有的键
方式二:map.entrySet().stream() 流上放的是键值对

数组

使用Arrays工具类
Arrays.stream(数组);

零散数据(前提:数据类型一致)

Stream接口中的静态方法 of
public static Stream of(T... values) { return Arrays.stream(values); }

中间方法

image.png
方法可以多个一起使用

终结方法

foreach 遍历
count统计
toArray收集流中数据,放到数组中
collect收集数据,放到集合(List、Set、Map)中
collect(Collectors.toList()) collect(Collectors.toSet()) collect(Collectors.toMap())

小案列:

ArrayList<String> arrayList = new ArrayList<>();
arrayList.add("zhangsan,25");
arrayList.add("lisi,21");
arrayList.add("zhaoliu,18");
arrayList.add("gouzhu,42");
//收集年龄大于等于24的人
Map<String, Integer> collect = arrayList.stream()
        .filter(s -> Integer.parseInt(s.split(",")[1]) >= 24)
        .collect(Collectors.toMap(
                s -> s.split(",")[0],
                s -> Integer.parseInt(s.split(",")[1])
        ));

Map集合的五种遍历方法

/*1.keyset迭代器遍历
Iterator<String> iterator = collect.keySet().iterator();
while (iterator.hasNext()){
   String next = iterator.next();
   Integer integer = collect.get(next);
   System.out.println(next+":"+integer);
}
*/

/*2.entryset迭代器
*Iterator<Map.Entry<String, Integer>> iterator = collect.entrySet().iterator();
while (iterator.hasNext()){
   Map.Entry<String, Integer> entry = iterator.next();
   System.out.println(entry);
}
*/

/*3.entryset遍历
Set<Map.Entry<String, Integer>> entries = collect.entrySet();
for (Map.Entry<String, Integer> entry : entries) {
   String key = entry.getKey();
   Integer value = entry.getValue();
   System.out.println(key+":"+value);
}
*/

/*4.keyset遍历
Set<String> keySet = collect.keySet();
for (String key : keySet) {
   Integer integer = collect.get(key);
   System.out.println(key+"="+integer);
}*/

/*Lambda表达式
collect.forEach((k,v)-> System.out.println(k+"="+v));
* 
*/