Stream流的简单入门
/**
* 创建添加集合元素,完成以下需求:
* 1. 把所有以’张’开头的集合元素存储到新集合中
* 2. 把’张’开头,长度为3的元素存储到新集合中
* 3. 遍历打印最终结果
*/
import java.util.ArrayList;
public class Demo1 {
public static void main(String[] args) {
/**
* 创建添加集合元素,完成以下需求:
* 1. 把所有以'张'开头的集合元素存储到新集合中
* 2. 把'张'开头,长度为3的元素存储到新集合中
* 3. 遍历打印最终结果
*/
ArrayList<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("张三丰");
list.add("王五");
list.add("张无忌");
// 方法一
//1. 把所有以'张'开头的集合元素存储到新集合中
ArrayList<String> list1 = new ArrayList<>();
for (String name : list) {
// startsWith: 模糊匹配
if (name.startsWith("张")){
list1.add(name);
}
}
//2. 把'张'开头,长度为3的元素存储到新集合中
ArrayList<String> list2 = new ArrayList<>();
for (String name : list1) {
if (name.length() == 3){
list2.add(name);
}
}
//3. 遍历打印最终结果
for (String name : list2) {
System.out.println(name);
}
// 方法二 stream流 filter--过滤方法
System.out.println("============================");
list.stream().filter(name->name.startsWith("张")).filter(name->name.length() == 3).forEach(name-> System.out.println(name));
}
}
Stream流的使用步骤
- 先得到一条Stream流,然后把数据放上去
- 利用stream的各种API进行各种操作:
– 中间方法: 过滤,转换。即方法调用完毕可以调用其他方法
– 终结方法: 统计,打印。即方法调用完毕不能调用其他方法
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.stream.Stream;
public class Demo2 {
public static void main(String[] args) {
/**
* 单列集合 default Stream<E> stream Collections中的默认方法
* 双列集合 无 无法直接使用stream流
* 数组 public static<T> Stream<T> stream(T[] array) Arrays工具类中的静态方法
* 零散数据 public static<T> Stream<T> of(T...values) stream接口中的静态方法
*/
// 单列集合
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list,"张三","李四","王五");
list.stream().forEach(name -> System.out.println(name));
System.out.println("====================");
// 双列集合
HashMap<String,String> map = new HashMap<>();
map.put("梅西","阿根廷");
map.put("内马尔","巴西");
map.put("苏亚雷斯","乌拉圭");
// 获取map中的所有key
map.keySet().stream().forEach(name -> System.out.println(name));
System.out.println("====================");
// 获取map的键值对
map.entrySet().stream().forEach(name -> System.out.println(name));
System.out.println("====================");
// 数组
int[] arr = {1,2,3,4,5};
Arrays.stream(arr).forEach(s -> System.out.println(s));
System.out.println("====================");
// 零散数据, 注意: 方法的形参是一个可变参数,可以传递零散数据,也可以传递数组,但数据必须是引用数据类型的,不能传递基本数据类型
Stream.of("a","b","c").forEach(s -> System.out.println(s));
System.out.println("====================");
Stream.of(arr).forEach(s -> System.out.println(s)); // 输出结果不是1,2,3,4,5 而是一个地址
String[] newArr = {"a","b","c"};
System.out.println("====================");
Stream.of(newArr).forEach(s -> System.out.println(s)); // 输出结果不是a,b,c
}
}