目标:Stream流的常用API
– Stream filter(Predicate<? super T> predicate)
forEach : 逐一处理(遍历)
count:统计个数
– long count();
filter : 过滤元素
limit : 取前几个元素
skip : 跳过前几个
map : 加工方法.
concat : 合并流
– public static Stream concat(Stream<? extends T> a, Stream<? extends T> b)
public class StreamDemo01 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("张无忌");
list.add("周芷若");
list.add("赵敏");
list.add("张强");
list.add("张三丰");
list.add("张三丰");
list.stream().filter(s -> s.startsWith("张")).forEach(System.out::println);
System.out.println("---------------------");
list.stream().filter(s -> s.startsWith("张"))
.limit(2).forEach(System.out::println);
System.out.println("---------------------");
list.stream().filter(s -> s.startsWith("张"))
.skip(2).forEach(System.out::println);
}
}
public class StreamDemo02 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("张无忌");
list.add("周芷若");
list.add("赵敏");
list.add("张强");
list.add("张三丰");
list.add("张三丰");
// 需求:给每个元素都加上前缀: 黑马的:"姓名"
list.stream().map(s -> "黑马的:"+s).forEach(System.out::println);
// 需求:把每个名称变成对应的学生对象!
list.stream().map(name -> new Student(name)).forEach(System.out::println);
}
}
public class StreamDemo03 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("张无忌");
list.add("周芷若");
list.add("赵敏");
list.add("张强");
list.add("张三丰");
list.add("张三丰");
// 数组流
Stream<String> s1 = Stream.of("10", "12", "18");
// 集合流
Stream<String> s2 = list.stream();
// 合并流
Stream<String> allStream = Stream.concat(s1 , s2 );
System.out.println(allStream.count());
}
}
public class Student {
private String name ;
public Student(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
'}';
}
}
综合应用案例
public class StreamDemo {
public static void main(String[] args) {
List<String> one = new ArrayList<>();
one.add("迪丽热巴");
one.add("宋远桥");
one.add("苏星河");
one.add("老子");
one.add("庄子");
one.add("孙子");
one.add("洪七公");
List<String> two = new ArrayList<>();
two.add("古力娜扎");
two.add("张无忌");
two.add("张三丰");
two.add("赵丽颖");
two.add("张二狗");
two.add("张天爱");
two.add("张三");
/**
* 1. 第一个队伍只要名字为3个字的成员姓名;
* 2. 第一个队伍筛选之后只要前3个人;
*/
Stream<String> oneStream = one.stream().filter(s->s.length()==3).limit(3);
/**
* 3. 第二个队伍只要姓张的成员姓名;
* 4. 第二个队伍筛选之后不要前2个人;
* 5. 将两个队伍合并为一个队伍;
*/
Stream<String> twoStream = two.stream().filter(s -> s.startsWith("张")).skip(2);
Stream<String> allStream = Stream.concat(oneStream , twoStream);
/**
* 6. 根据姓名创建`Student`对象;
* 7. 打印整个队伍的Student对象信息。
*/
allStream.map(name -> new Student(name)).forEach(System.out::println);
}
}
public class Student {
private String name ;
public Student(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
'}';
}
}