JDK8新特性Stream流操作

 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表达式。
原文地址:https://www.cnblogs.com/sun-10387834/p/13526696.html