沧州南皮网站建设公司深圳高端网站建设网页设计
- 作者: 五速梦信息网
- 时间: 2026年03月21日 10:09
当前位置: 首页 > news >正文
沧州南皮网站建设公司,深圳高端网站建设网页设计,网站建设情况报告,品牌网站建设工作室目录 一、 引言 二、 Stream流概述 三、Stream流的使用步骤 1. 获取Stream流 1.1 单列集合 1.2 双列集合 1.3 数组 1.4 零散数据
- Stream流的中间方法
- Stream流的终结方法 四、 练习
- 数据过滤
- 数据操作 - 按年龄筛选
- 数据操作 - 演员信息要求…目录 一、 引言 二、 Stream流概述 三、Stream流的使用步骤 1. 获取Stream流 1.1 单列集合 1.2 双列集合 1.3 数组 1.4 零散数据
- Stream流的中间方法
- Stream流的终结方法 四、 练习 1. 数据过滤 2. 数据操作 - 按年龄筛选
- 数据操作 - 演员信息要求筛选 一、 引言 初识Stream流的作用 需求按照下面的要求完成集合的创建和遍历创建一个集合存储多个字符串元素 通过下面代码显然我们清晰的看到使用Stream流更为方便而使用不同的集合遍历就有些复杂。 public class Test01 {public static void main(String[] args) {ArrayListString list1 new ArrayList();list1.add(张无忌);list1.add(周正若);list1.add(赵斌);list1.add(张强);list1.add(张三丰);// Stream流list1.stream().filter(name - name.startsWith(张)).filter(name - name.length() 3).forEach(name - System.out.println(name));// 张无忌// 张三丰// 1.把所有“张”姓开头元素存储到新集合ArrayListString list2 new ArrayList();for (String name : list1) {if (name.startsWith(张)) {list2.add(name);}}System.out.println(list2); // [张无忌, 张强, 张三丰]// 2.把所有“张”姓开头且长度为3的元素存储到新集合ArrayListString list3 new ArrayList();for (String name : list2) {if (name.length() 3) {list3.add(name);}}System.out.println(list3); // [张无忌, 张三丰]} }二、 Stream流概述 例如上面的小例子Stream流的思想如下 顺序筛选Stream流的作用 结合了Lambda表达式简化集合、数字的操作。 三、Stream流的使用步骤 先得到一条Stream流流水线并把数据放上去。使用中间方法对流水线上的数据进行操作。使用终结方法对流水线上的数据进行操作。过滤、转换中间方法方法调用完毕之后还可以调用其他方法统计、打印终结方法最后一步调用完毕之后不能调用其他方法1. 获取Stream流 获取方式方法名说明单列集合default StreamE stream()Collection中的默认方法双列集合无 无法直接使用stream流需要通过keySet()或者entrySet()变成单列集合 数组public static T Stream T stream(T [ ] array)Arrays工具类中的静态方法一堆零散数据public static T Stream T of(T… values)stream接口中的静态方法 1.1 单列集合 public class StreamTest {public static void main(String[] args) {//单列集合获取Stream流ArrayListString list new ArrayList();Collections.addAll(list, a,b,c,d,e);//获取到一个流水线并把集合中的数据方法流水线上//StreamString stream1 list.stream();//使用终结方法打印流水线上数据//stream1.forEach( s -System.out.println(s) );list.stream().forEach(s - System.out.println(s));} } 1.2 双列集合 public class StreamTest {public static void main(String[] args) {//双列集合获取Stream流 //1. 创建双列集合HashMapString, Integer hm new HashMap();//2. 添加数据hm.put(aaa, 111);hm.put(bbb, 222);hm.put(ccc, 333);//3.1 获取Stream流方法一 keySet()//键hm.keySet().stream().forEach(s - System.out.println(s));//3.2 获取Stream流方法二entrySet()//键值对hm.entrySet().stream().forEach(s - System.out.println(s)); } }1.3 数组 Stream接口中静态方法of的细节 方法的形参是一个可变参数可以传递一堆零散数据也可以传递数组。但是数组必须是引用数据类型。如果传递的是基本数据类型是会把整个数组相当做一个元素放到一个stream流当中。public class StreamTest {public static void main(String[] args) {//数组获取Stream流 //1.创建基本数据类型数组int[] arr1 {1,2,3,4,5,6,7,8,9,10};//获取streamArrays.stream(arr1).forEach(s - System.out.println(s));//2.创建引用数据类型数组String[] arr2 {a,b,c};//获取streamArrays.stream(arr2).forEach(s - System.out.println(s));//方式是错误的!!!//Stream接口中静态方法of的细节//方法的形参是一个可变参数可以传递一堆零散数据也可以传递数组//但是数组必须是引用数据类型//如果传递的是基本数据类型是会把整个数组相当做一个元素放到一个stream流当中Stream.of(arr2).forEach(s - System.out.println(s));Stream.of(arr1).forEach(s - System.out.println(s)); //[I1b28cdfa} } 1.4 零散数据 细节 一堆零散数据需要是相同的数据类型。 public class StreamTest {public static void main(String[] args) {//零散数据获取Stream流 //基本数据类型Stream.of(1,2,3,4,5).forEach(s - System.out.println(s));//引用数据类型Stream.of(a,b,c,d,e).forEach(s - System.out.println(s));} }
- Stream流的中间方法 方法名称说明StreamT filter ( Predicate? super T predicate )过滤StreamT limit ( long maxSize)获取前几个元素StreamT skip ( long n )跳过前几个元素StreamT distinct ( )元素去重依赖(hashCode和equals方法)static T StreamT concat ( Stream a , Stream b )合并a和b两个流为一个流StreamR map ( FunctionT ,R mapper )转换流中的数据类型注意一中间方法返回新的Stream流原来的Stream流只能使用一次建议使用链式编程。 注意二修改Stream流中的数据不会影响原来集合或者数组中的数据。 public class StreamTest01 {public static void main(String[] args) {//1.过滤:把开头的留下其余数据过滤不要ArrayListString list new ArrayList();Collections.addAll(list, 张三,李四,王五,赵六,张七);ArrayListString list2 new ArrayList();Collections.addAll(list2, 张三,李四,王五,赵六,张三);ArrayListString list3 new ArrayList();Collections.addAll(list3, 孙七,钱八);ArrayListString list4 new ArrayList();Collections.addAll(list2, 张三-23,李四-24,王五-25);list.stream().filter(new PredicateString() {//匿名内部类太麻烦 需要缩写Overridepublic boolean test(String s) {//如果返回值为true,表示当前数据留下//如果返回值为false,表示当前数据舍弃return s.startsWith(张);}}).forEach(s - System.out.println(s)); //张三 张七list.stream().filter(s - s.startsWith(张)).forEach(s - System.out.println(s));//2. 获取前几个元素 list.stream().limit(3).forEach(s - System.out.println(s)); //张三 李四 王五//3. 跳过list.stream().skip(4).forEach(s - System.out.println(s)); //张七//4.去重list2.stream().distinct().forEach(s - System.out.println(s)); //张三 李四 王五 赵六//5. 合并Stream.concat(list2.stream(), list3.stream()).forEach(s - System.out.println(s));//6.转换数据类型//只能获取集合里面的年龄并打印//第一个类型流中原本的数据类型//第二个类型将要转变成为的数据类型list4.stream().map(new FunctionString,Integer() {Override//apply: 依次表示流中的每一盒数据//返回值表示转化之前的数据public Integer apply(String s) {String[] arr s.split(-);String ageString arr[1];int age Integer.parseInt(ageString);return age;}}).forEach(s - System.out.println(s));list.stream().map(s -Integer.parseInt(s.split(-)[1])).forEach(s - System.out.println(s));} }
- Stream流的终结方法 方法名称说明void forEach ( Consumer action )遍历long count ( )统计toArray ( )收集流中的数据放到数组中collect ( Collector collector )收集流中的数据放到集合中 public class StreamTest02 {public static void main(String[] args) {ArrayListString list new ArrayList();Collections.addAll(list, 张三, 李四, 王五, 赵六);// 遍历// Consumer的泛型表示流中的数据类型// accept方法的形参s依次表示流中的每一个数据//list.stream().forEach(new ConsumerString() {Overridepublic void accept(String s) {System.out.println(s);}});list.stream().forEach(s - System.out.println(s)); // 张三 李四 王五 赵六// 统计long count list.stream().count();System.out.println(count); // 4// 收集数据放进数组Object[] arr1 list.stream().toArray();System.out.println(Arrays.toString(arr1)); // [张三, 李四, 王五, 赵六]// 指定数据类型// Infunction的泛型具体类型的数组// apply中形参流中数据的个数要跟数组长度一致// apply的返回值具体类型的数组String[] arr2 list.stream().toArray(new IntFunctionString {Overridepublic String[] apply(int value) {return new String[value];}});// toArray方法中的参数只是创建一个指定类型的数组// toArray底层 会此意得到流中的每一个数据并把数据放到数组中// toArray的返回值是一个装着流里面所有数据的数组System.out.println(Arrays.toString(arr2));// lambda表达式String[] arr3 list.stream().toArray(value - new String[value]);System.out.println(Arrays.toString(arr3));} } collect方法 public class StreamTest {public static void main(String[] args) {ArrayListString list new ArrayList();Collections.addAll(list, 张三-男-23, 李四-男-24, 王五-男-25, 赵六-女-27, 孙八-女-28);//收集到List集合当中//需求//将所有的男性收集起来ListString newList list.stream().filter(s- 男.equals(s.split(-)[1])).collect(Collectors.toList());System.out.println(newList); //[张三-男-23, 李四-男-24, 王五-男-25]//收集到Set集合当中SetString newSet list.stream().filter(s- 男.equals(s.split(-)[1])).collect(Collectors.toSet());System.out.println(newSet);//收集到Map集合当中//键 姓名 值 年龄//toMap//参数一表示键的生成规则 参数二表示值得生成规则//参数一 //Function泛型一表示流中每一个数据的类型 // 泛型二表示Map集合中键的数据类型//方法apply 形参一次表示流里面的每一个数据// 方法体生成键的代码 // 返回值已生成的键//参数二//Function泛型一表示流中每一个数据的类型 // 泛型二表示Map集合中值的数据类型//方法apply 形参一次表示流里面的每一个数据// 方法体生成值的代码 // 返回值已生成的值MapString, Integer newMap list.stream().filter(s- 男.equals(s.split(-)[1])).collect(Collectors.toMap(new FunctionString, String() {Overridepublic String apply(String s) {return s.split(-)[0];}}, new FunctionString, Integer () {Overridepublic Integer apply(String s) {return Integer.parseInt(s.split(-)[2]);}}));System.out.println(newMap); //{李四24, 张三23, 王五25}//lambda表达式MapString, Integer newMap1 list.stream().filter(s- 男.equals(s.split(-)[1])).collect(Collectors.toMap( s- s.split(-)[0], s- Integer.parseInt(s.split(-)[2])));System.out.println(newMap1);} } 四、 练习 1. 数据过滤 需求 定义一个集合并添加一些整数12345678910 过滤奇数只留下偶数。 并将结果保存起来 public class StreamDemo {public static void main(String[] args) {// 1.定义一个集合ArrayListInteger list new ArrayList();// 2.添加数据Collections.addAll(list, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);// 3.过滤奇数只留偶数// 进行判断如果是偶数返回trueListInteger list2 list.stream().filter(n - n % 2 0).collect(Collectors.toList());System.out.println(list2); //[2, 4, 6, 8, 10]} } 2. 数据操作 - 按年龄筛选 需求 创建一个ArrayList集合并添加以下字符串字符串中前面是姓名后面是年龄 “zhangsan23” “lisi24 “wangwu25” 保留年龄大于等于24岁的人并将结果收集到Map集合中姓名为键年龄为值 public class StreamDemo {public static void main(String[] args) {// 1.定义一个集合ArrayListString list new ArrayList();//2.集合添加字符串list.add( zhangsan,23);list.add(lisi,24);list.add(wangwu,25);//3.保留年龄大于24岁的人MapString, Integer map list.stream().filter(s - Integer.parseInt(s.split(,)[1]) 24).collect(Collectors.toMap(s - s.split(,)[0], s - Integer.parseInt(s.split(,)[1])));System.out.println(map); //{lisi24, wangwu25}} }
- 数据操作 - 演员信息要求筛选 现在有两个ArrayList集合 第一个集合中存储6名男演员的名字和年龄。第二个集合中:存储6名女演员的名字和年龄。姓名和年龄中间用逗号隔开。比如张三23 要求完成如下的操作: 男演员只要名字为3个字的前两人女演员只要姓杨的并且不要第一个把过滤后的男演员姓名和女演员姓名合并到一起将上一步的演员信息封装成Actor对象。将所有的演员对象都保存到List集合中。备注演员类Actor属性有name,age public class StreamDemo {public static void main(String[] args) {// 1.定义两个集合ArrayListString manList new ArrayList();ArrayListString womenList new ArrayList();// 2.添加数据Collections.addAll(manList, 蔡坤坤,24, 叶购成,23, 刘不甜,22, 吴签,24, 谷嘉,30, 肖梁梁,27);Collections.addAll(womenList, 赵小颖,35, 杨颖,36, 高元元,43, 张天天,31, 刘诗,35, 杨小幂,33);// 3. 男演员只要名字为3个字的前两个人StreamString stream1 manList.stream().filter(s - s.split(,)[0].length() 3).limit(2); // .forEach(s - System.out.println(s)); // 蔡坤坤,24 叶购成,23// 叶购成,23//4.女演员只要姓杨的 并且不要第一个StreamString stream2 womenList.stream().filter(s - s.split(,)[0].startsWith(杨)).skip(1); // .forEach(s - System.out.println(s)); //杨小幂,33//5.把过滤的男演员和女演员信息合并在一起//演员信息封装进Actor对象//String - Actor对象类型转换ListActor list Stream.concat(stream1, stream2).map(s - new Actor(s.split(,)[0],Integer.parseInt(s.split(,)[1]))).collect(Collectors.toList());System.out.println(list);} }
- 上一篇: 沧州南皮手机网站建设服装网站推广方案
- 下一篇: 沧州企业网站制作的微信推广的平台
相关文章
-
沧州南皮手机网站建设服装网站推广方案
沧州南皮手机网站建设服装网站推广方案
- 技术栈
- 2026年03月21日
-
沧州免费网站建设做百度推广代运营有用吗
沧州免费网站建设做百度推广代运营有用吗
- 技术栈
- 2026年03月21日
-
沧州公司做网站在济南什么人想做网站
沧州公司做网站在济南什么人想做网站
- 技术栈
- 2026年03月21日
-
沧州企业网站制作的微信推广的平台
沧州企业网站制作的微信推广的平台
- 技术栈
- 2026年03月21日
-
沧州手机网站建设个人音乐网站源码搭建
沧州手机网站建设个人音乐网站源码搭建
- 技术栈
- 2026年03月21日
-
沧州手机网站设计本网站图片大全
沧州手机网站设计本网站图片大全
- 技术栈
- 2026年03月21日






