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表达式。