电商网站有哪些功能模块wordpress中文版书籍
news/
2025/10/7 4:55:08/
文章来源:
电商网站有哪些功能模块,wordpress中文版书籍,谷歌商店官网,代理记账一般多少钱一个月#x1f468;#x1f393;作者简介#xff1a;一位大四、研0学生#xff0c;正在努力准备大四暑假的实习 #x1f30c;上期文章#xff1a;JAVASE进阶#xff1a;源码精读——HashMap源码详细解析 #x1f4da;订阅专栏#xff1a;JAVASE进阶 希望文章对你们有所帮助… 作者简介一位大四、研0学生正在努力准备大四暑假的实习 上期文章JAVASE进阶源码精读——HashMap源码详细解析 订阅专栏JAVASE进阶 希望文章对你们有所帮助 Stream流的使用是一种高级的写法配合函数式编程lambda表达式能够极大简化我们程序的编写有些二十行的代码也可以一行代码就实现代码看起来也高雅了很多这也是成为高级程序员的必会技能。
先讲原理再实现一些例子。 一文精通Stream流函数式编程 引入Stream流思想获取Stream流Stream流的中间方法Stream流终结方法详解收集方法collect练习数字过滤字符串过滤并收集自定义对象过滤并收集 引入
现在实现一个简单的需求创建一个集合来存储名字并且输出名字长度为3且姓为“张”的所有名字。 这里直接用ArrayList模拟起来还是很简单的但是当相对还是要写很长的语句而Stream流和Lambda表达式的集合能够极大地非常简化我们的代码编写处理集合并输出的语句只需要一句话
list.stream().filter(name-name.startWith(张)).filter(name-name.length()3).forEach(name-System.out.println(name));这代码对一个程序员的诱惑程度别提有多大。
Stream流思想
流可以视为流水线学过计算机系统都知道流水线的相关原理它可以大大提升执行的性能。 如上例子可以分为流水线中的3个子任务过滤留下“张”姓开头的过滤留下长度为3的输出。 对于每一个子任务Stream流一般都会结合lambda表达式来简化集合、数组的操作。
Stream流的使用步骤 1、先得到一条Stream流流水线并把数据放上去 2、利用Stream流的API进行各种操作 1中间方法过滤、转换 2终结方法统计、打印 获取Stream流
获取方式方法名说明单列集合stream()Collection中的默认方法双列集合无无法直接使用是Stream流需要先通过keySet或entrySet转换成单列集合数组stream(T[] array)Arrays工具类中的静态方法一堆零散数据of(T…values)Stream接口中的静态方法
1、单列集合
ArrayListString list new ArrayList();
Collections.addAll(list, a, b, c, d);
//StreamString stream list.stream()可以获取流但一般不这么用而是直接一路链式编程
list.stream().forEach(s-System.out.println(s));//forEach是终结方法2、双列集合
HashMapString, Integer map new HashMap();
map.put(aaa, 111);map.put(bbb, 222);
//方法一把key都拿出来单独做处理
map.keySet().stream().forEach(s-System.out.println(s));
//方法二获取每个键值对对象
map.entrySet().stream().forEach(s-System,out.println(s));3、数组
int[] arr {1,2,3,4,5};
Arrays.stream(arr).forEach(s-System,out.println(s));4、零散数据
Stream.of(1,2,3,4,5).forEach(s-System,out.println(s));
Stream.of(a,b,c).forEach(s-System,out.println(s));在很多时候都是推荐使用of方法这是因为of方法形参写法为T...values这是一种可变参数的书写形式所以无论传递零散的数据还是一个数组都是可以成功处理的。
但是有一个很关键的点of方法传入的数组里面的数据必须是引用数据类型的如果是基本数据类型那么只会把这一整个数组当作一个元素输出的会是地址
Stream流的中间方法
名称说明filter过滤limit获取前几个元素skip跳过前几个元素distinct元素去重依赖hashCode和equals方法concat合并a和b两个流为一个流map转换流中的数据类型
注意 1、中间方法会返回新的流原来的Stream流只能使用一次建议使用链式编程 2、修改Stream流中的数据不会影响原来集合或数组中的数据 1、filter 1匿名内部类
list.stream().filter(new PredicateString() {Overridepublic boolean test(String s){//返回值为true则表示当前数据留下return s.startWith(张);}
}).forEach(s-System.out.println(s));2lambda表达式
list.stream().filter(s-s.startWith(张)).forEach(s-System.out.println(s));2、limit
//输出前3个
list.stream().limit(3).forEach(s-System.out.println(s));3、skip
//跳过前4个
list.stream().skip(4).forEach(s-System.out.println(s));4、distinct
list.stream().distinct().forEach(s-System.out.println(s));distinct的底层是非常复杂的其核心是使用HashSet实现去重的
5、concat尽可能让两个stream流中的数据保持一致不然会将数据类型变成它们的共同父类导致缺失一些子类的特有功能
Stream.concat(list1.stream(), list2.stream()).forEach(s-System.out.println(s));6、map实现流中数据的类型转换将String类型字符串中的年龄转换成int并输出
Collections.addAll(list, 一二-12, 布布-14);1匿名内部类
list.stream().map(new FunctionString, Integer(){//String表示stream中的数据类型Integer表示要转换的数据类型不能写int必须写包装类默认为ObjectOverridepublic Integer apply(String s){//s表示stream流里的每一个数据返回值为转换后的数据String[] arr s.split(-);String ageString arr[1];int age Integer.parseInt(ageString);return age;}
}).forEach(s-System.out.println(s));2lambda表达式
list.stream().map(s-Integer.parseInt(s.split(-)[1])).forEach(s-System.out.println(s));这个lambda表达式写起来剪枝不要太爽
Stream流终结方法详解
名称说明forEach遍历count统计toArray收集流中数据放到数组中collect收集流中数据放到集合中
1、forEach 1匿名内部类
list.stream().forEach(new ConsumerString(){Overridepublic void accept(String s){System.out.println(s)}
});2lambda表达式
list.stream().forEach(s-System.out.println(s));2、count统计
long count list.stream().count();3、toArray收集int类型数据到String类型数组中 1匿名内部类
//注意IntFunction中要传递数组泛型所以需要传入String[]
String[] arr list.stream().toArray(new new IntFunctionString[]() {Overridepublic void apply(int value){//value表示数组的长度方法体只需要创建一个数组即可返回的类型要和泛型一致return new String[value];}
});
System.out.println(Arrays.toString(arr));2lambda表达式
String[] arr list.stream().toArray(value-new String[value]);
System.out.println(Arrays.toString(arr));collect方法算是比较重要的方法了在后面详细讲解。
收集方法collect
collect可以将流里面的数据收集到单列集合或双列集合中去的。
收集到List集合 ListString list new ArrayList();Collections.addAll(list, 张无忌-男-15, 小龙女-女-12, 一二-女-4, 布布-男-5);//把所有的男性收集起来ListString newList list.stream().filter(s - 男.equals(s.split(-)[1])).collect(Collectors.toList());System.out.println(newList);同样的也可以收集到Set中去单列集合还是比较方便的。
如果要收集到双列集合Map中就需要指定键和值是哪个字段
可以打开ToMap的底层源码可以清楚的看到调用toMap方法需要指定键和值的规则其底层会自动的创建一个HashMap对象 收集到Map集合里面的代码和细节如下所示需要注意的是要想收集Map必须保证键是不重复的。
1匿名内部类 //键姓名 值年龄MapString, Integer map list.stream().filter(s - 男.equals(s.split(-)[1]))/*** toMap参数一表示键的生成规则* 参数二表示值的生成规则** 参数一* Function泛型一流中每一个数据的类型* 泛型二Map集合中键的数据类型* 方法apply形参依次表示流里面的每一个数据* 方法体生成键的代码* 返回值已经生成的键* 也就是说Function中第一个泛型与apply的形参一致第二个泛型与apply的返回类型一致** 参数二同理*/.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(map);2lambda表达式 MapString, Integer map list.stream().filter(s - 男.equals(s.split(-)[1])).collect(Collectors.toMap(s-s.split(-)[0],s-Integer.parseInt(s.split(-)[2])));练习
数字过滤
定义一个集合并添加整数1-10过滤奇数只留下偶数并将结果保存起来
ArrayListInteger list new ArrayList();
Collections.addAll(list, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
ListInteger list1 list.stream().filter(s - (s 1) 0).collect(Collectors.toList());
System.out.println(list1);字符串过滤并收集
创建一个ArrayList集合并添加以下字符串 “zhangsan,23” “lisi,24” “wangwu,25” 保留年龄大于等于24岁的人并将结果收集到Map集合中姓名为键年龄为值 public static void main(String[] args) {String s1 a, s2 b;//System.out.println(s1.compareTo(s2));ArrayListString list new ArrayList();Collections.addAll(list, zhangsan,23, lisi,24, wangwu,25);//filter也可以转换成Integer类型再去做比较MapString, Integer map list.stream().filter(s - 24.compareTo(s.split(,)[1]) 0).collect(Collectors.toMap(s - s.split(,)[0],s - Integer.parseInt(s.split(,)[1])));System.out.println(map);}自定义对象过滤并收集 自行去创建一个Actor对象String类型的name、int类型的age并且重写toString方法。
代码如下 public static void main(String[] args) {ArrayListString manList new ArrayList();ArrayListString womenList new ArrayList();Collections.addAll(manList, 坤坤,24, 再多,23, 看一眼,20, 就快,19, 要爆炸,22, 铁山靠,26);Collections.addAll(womenList, 朵拉,21, 杨幂,30, 杨超越,22, 露娜,25, 妲己,24, 安琪拉,23);StreamString stream1 manList.stream().filter(s - s.split(,)[0].length() 3).limit(2);StreamString stream2 womenList.stream().filter(s-s.startsWith(杨)).skip(1);ListActor list Stream.concat(stream1, stream2).map(new FunctionString, Actor() {Overridepublic Actor apply(String s) {return new Actor(s.split(,)[0], Integer.parseInt(s.split(,)[1]));}}).collect(Collectors.toList());}System.out.println(list);其中map里面的匿名内部类还可以转化为lambda表达式
s-new Actor(s.split(,)[0], Integer.parseInt(s.split(,)[1]))
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/929967.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!