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); }
中间方法
方法可以多个一起使用
终结方法
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));
*
*/