1 package stream;
2
3 import java.util.ArrayList;
4 import java.util.function.Function;
5 import java.util.stream.Stream;
6
7 public class test {
8 public static void main(String[] args) {
9 ArrayList<String> one = new ArrayList<>();
10 one.add("迪丽热巴");
11 one.add("宋远桥");
12 one.add("苏星河");
13 one.add("石破天");
14 one.add("石中玉");
15 one.add("老子");
16 one.add("庄子");
17 one.add("洪七公");
18 //第二支队伍
19 ArrayList<String> two = new ArrayList<>();
20 two.add("古力娜扎");
21 two.add("张无忌");
22 two.add("赵丽颖");
23 two.add("张三丰");
24 two.add("尼古拉斯赵四");
25 two.add("张天爱");
26 two.add("张二狗");
27
28 //1. 第一个队伍只要名字为3个字的成员姓名;存储到一个新集合中。
29 Stream<String> stream = one.stream();
30 Stream<String> stringStream = stream.filter((String name) -> name.length() == 3);
31 // stringStream.forEach((String name)-> System.out.println(name));
32
33 //2. 第一个队伍筛选之后只要前3个人;存储到一个新集合中。
34 Stream<String> limit = stringStream.limit(3);
35 // limit.forEach((String name)-> System.out.println(name));
36
37 //3. 第二个队伍只要姓张的成员姓名;存储到一个新集合中。
38 Stream<String> stream1 = two.stream();
39 Stream<String> zhanglist = stream1.filter((String name) -> name.startsWith("张"));
40 // zhanglist.forEach((String name)-> System.out.println(name));
41
42 //4. 第二个队伍筛选之后不要前2个人;存储到一个新集合中。
43 Stream<String> skip = zhanglist.skip(2);
44 // skip.forEach((String name)-> System.out.println(name));
45
46 //5. 将两个队伍合并为一个队伍;存储到一个新集合中。
47 Stream<String> concat = Stream.concat(limit, skip);
48 // concat.forEach((String name)-> System.out.println(name));
49
50 //6. 根据姓名创建 Person 对象;存储到一个新集合中。
51 Stream<Person> personStream = concat.map((String name) -> new Person(name));
52
53 //7. 打印整个队伍的Person对象信息。
54 personStream.forEach((Person person) -> System.out.println(person));
55 }
56
57 }
# 注:代码中注释部分 是由于如果直接打印 ,该流对象就会失效,后续操作无法进行。
创建流对象的两种方式
1 java.util.stream.Stream<T>是Java 8新加入的最常用的流接口。(这并不是一个函数式接口。)
2 获取一个流非常简单,有以下几种常用的方式:
3 - 所有的Collection集合都可以通过stream默认方法获取流;
4 default Stream<E> stream()
5 - Stream接口的静态方法of可以获取数组对应的流。
6 static <T> Stream<T> of(T... values)
7 参数是一个可变参数,那么我们就可以传递一个数组
forEach()方法和count()方法属于终结方法,返回的对象是最终结果。像filter()、map()、concat()、skip()、limit()等返回的仍然是stream对象。而且filter()、map()、concat()、skip()、limit()
这些方法内部可以使用lambda表达式。