背景
日常开发中一些好的代码设计是完全可以复用,他能简单枯燥的增删改查变得有趣。同时与他人交流及学习优秀的代码设计,并在日常工作中实践或者优化重构自己的代码,是提升自己编码能力重要途径之一,本次交流旨在讲解一些优秀的代码设计并做交流。
stream流操作
在JAVA中,涉及到对数组、Collection等集合类中的元素进行操作的时候,通常会通过循环的 方式进行逐个处理,或者使用Stream的方式进行处理。
例如,现在有这么一个需求:
从给定句子中返回单词长度大于5的单词列表,按长度倒序输出,最多返回3个
在JAVA7及之前的代码中,我们会可以照如下的方式进行实现:
publicList<String>sortGetTop3LongWords(Stringsentence) { // 先切割句子,获取具体的单词信息String[] words=sentence.split(" "); List<String>wordList=newArrayList<>(); // 循环判断单词的长度,先过滤出符合长度要求的单词for (Stringword : words) { if (word.length() >5) { wordList.add(word); } } // 对符合条件的列表按照长度进行排序wordList.sort((o1, o2) ->o2.length() -o1.length()); // 判断list结果长度,如果大于3则截取前三个数据的子list返回if (wordList.size() >3) { wordList=wordList.subList(0, 3); } returnwordList; }
在JAVA8及之后的版本中,借助Stream流,我们可以更加优雅的写出如下代码:
publicList<String>sortGetTop3LongWordsByStream(Stringsentence) { returnArrays.stream(sentence.split(" ")) .filter(word->word.length() >5) .sorted((o1, o2) ->o2.length() -o1.length()) .limit(3) .collect(Collectors.toList()); }
直观感受上, Stream 的实现方式代码更加简洁、一气呵成。很多的同学在代码中也经常使用 Stream流,但是对Stream流的认知往往也是仅限于会一些简单的 filter 、 map 、 collect 等 操作,但JAVA的Stream可以适用的场景与能力远不止这些。