Stream流综合案例
现在有两个ArrayList集合,分别存储6名男演员名称和6名女演员名称,要求完成如下的操作 1、男演员只要名字为3个字的前3人 2、女演员只要姓刘,并且不要第一个 3、把过滤后的男演员姓名和女演员姓名合并到一起 4.1、把上一步操作后的元素作为构造方法的参数创建演员对象,遍历数据 4.2、演员类Actor已经提供,里面有一个成员变量,一个带参构造方法,以及成员变量对应的get/set方法
Stream流综合案例的练习
xxxxxxxxxx
package ch26;
public class a_9_1Actor {
//定义成员变量
private String name;
//带参构造方法
public a_9_1Actor(String name) {
this.name = name;
}
//成员变量对应的get和set方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
xxxxxxxxxx
package ch26;
import java.util.ArrayList;
import java.util.stream.Stream;
public class a_9_2测试 {
public static void main(String[] args) {
ArrayList<String> manList = new ArrayList<String>();
manList.add("胡歌");
manList.add("杨洋");
manList.add("王俊凯");
manList.add("刘昊然");
manList.add("张艺兴");
manList.add("刘德华");
ArrayList<String> womanList = new ArrayList<String>();
womanList.add("刘诗诗");
womanList.add("刘嘉玲");
womanList.add("刘亦菲");
womanList.add("赵丽颖");
womanList.add("杨幂");
womanList.add("刘紫玲");
//------------------------------------------------------------------------------------------------
//1、男演员只要名字为3个字的前3人
Stream<String> manStream = manList.stream().filter(s -> s.length() == 3).limit(3);//stream接口的filter过滤,limit取前几个元素
//2、女演员只要姓刘的,并且不要第一个
Stream<String> womanStream = womanList.stream().filter(s -> s.startsWith("刘")).skip(1);//filter过滤,startsWith指定元素开头,skpi跳过前几个元素
//3、把过滤后的男演员姓名和女演员姓名合并到一起
Stream<String> bothStream = Stream.concat(manStream, womanStream);
//4.1、把上一步操作后的元素作为构造方法的参数创建演员对象,遍历输出数据
//bothStream.map(a_9_1Actor::new).forEach(System.out::println);
//上面那行输出的是地址值,不是演员名字。解决:在a_9_1Actor类里面重写toString方法。但是我们不这样,而是换另一种解决写法,如下。先把上面那行注释掉,不然冲突报错
bothStream.map(a_9_1Actor::new).forEach(p-> System.out.println(p.getName()));
System.out.println("-------------------");
//----------------------------------------------------------------------------------------------
//思考:如何把上面的4步优化简写为1行一下,如下
Stream.concat(manList.stream().filter(s->s.length()==3).limit(3),womanList.stream().filter(s->s.startsWith("刘")).skip(1)).map(a_9_1Actor::new).forEach(p-> System.out.println(p.getName()));
}
}