「程序员」同样是写过滤器,牛逼程序员和一般程序员的区别?


「程序员」同样是写过滤器,牛逼程序员和一般程序员的区别?
文章图片
「程序员」同样是写过滤器,牛逼程序员和一般程序员的区别?
文章图片
「程序员」同样是写过滤器,牛逼程序员和一般程序员的区别?
文章图片
「程序员」同样是写过滤器,牛逼程序员和一般程序员的区别?
今天是我自学Java的第39天 。

感谢你的观看 , 谢谢你 。
话不多说 , 开始今天的学习:
用过安卓手机的同学应该都知道:

打开文件管理 , 可以查看到文件分类:
所有图片都在图片栏里;所有视频都在视频栏里;所有音乐都在音乐栏里……等等 。
那这种需求在Java代码里面要如何做到?
就需要使用到过滤器了 。
一、过滤器什么叫过滤器?
就是根据特定的要求 , 找出对应条件的文件 。
比如说 , 过滤出图片文件:
①创建一个file对象
路径填写我们现在作为例子的文件夹“F:/test\" 。
②定义一个find方法
该方法的作用为:查找文件夹中的图片文件 。
③file如果是文件
根据后缀名是否为“jpg”来判断图片文件 , 并输出该文件 。
④file如果是文件夹
因为我们要查询的是图片文件 , 那么要先遍历 。
使用file的listFilts方法 , 再使用增强for循环遍历 。
子文件里面可能同时又有文件夹和文件 , 故递归
⑤递归调用自己
find方法本身就是查找文件夹里的图片文件的 , 那么直接调用自己就好了 。
OK , 代码写完 , 运行下来发现控制台打印的都是文件夹中的图片文件 , 需求解决 。
但是现在问题来了 , 这种代码写下来水平就很差 , 因为代码的可拓展性太差了 。
什么叫可拓展性?
拓展性越强 , 需求改变时 , 需要修改的代码越少 。
就拿上述例子来说:是 , 确实解决了查找图片的需求 , 但是如果现在要查找音乐文件呢?该怎么办?如果要查找视频文件呢?
得将代码复制粘贴 , 然后将“jpg”一个个修改 , 这样的话代码就太冗余了 。
如何解决扩展性问题?
二、过滤器优化
①定义一个查找方法
设置两个参数:文件对象 , 后缀名;根据后缀名查找对应的文件 。
②如果是文件
根据isFile()方法 , 判断是否是文件 , 若是文件再进行判断 , 同时结束递归 。
③判断文件是否满足要求 。
根据提供的后缀名 , 来判断是否满足的要求 。
④如果是文件夹
先遍历 , 再递归 。
OK , 需求解决了 , 现在想查找某种类型的文件 , 直接在调用方法时设定参数就好了 。
那么问题又来了:
如果有用户要查询前缀名为a的图片 , 该怎么办?
如果有用户要查询包含“cad”的图片 , 又该怎么办?
如果有用户要查询大小小于1M的图片 , 又该怎么办?
因为用户的需求是各种各样的 , 程序员得去满足这些要求 。
我觉得写代码有一个最大的魅力:实现需求时要考虑的非常全面 , 这样在遇到问题的时候 , 能很好地去应对 。
就像网上流传的一句话:只有将用户想象成最傻最傻的人 , 考虑到各种各样的问题 , 才能写出好的代码 。
三、过滤器再次优化如何进一步优化?仔细看第二节中的代码:
③是问题的核心所在 , 因为③将代码给写死了 , endsWith方法只能用来判断后缀名 。
那怎么解决这个问题?


推荐阅读