stream流的使用

吃透stream流的使用咯--后续会一直更新在工作中使用的案例以及练习的gitee地址

study-exercise: java技能点的练习demo

在JAVA中,涉及到对数组Collection等集合类中的元素进行操作的时候,通常会通过循环的方式进行逐个处理,或者使用Stream的方式进行处理。

例如,现在有这么一个需求:

从给定句子中返回单词长度大于5的单词列表,按长度倒序输出,最多返回3个

JAVA7及之前的代码中,我们会可以照如下的方式进行实现:


/**
 * 【常规方式】
 * 从给定句子中返回单词长度大于5的单词列表,按长度倒序输出,最多返回3个
 *
 * @param sentence 给定的句子,约定非空,且单词之间仅由一个空格分隔
 * @return 倒序输出符合条件的单词列表
 */
public List<String> sortGetTop3LongWords(@NotNull String sentence) {
    // 先切割句子,获取具体的单词信息
    String[] words = sentence.split(" ");
    List<String> wordList = new ArrayList<>();
    // 循环判断单词的长度,先过滤出符合长度要求的单词
    for (String word : 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);
    }
    return wordList;
}

JAVA8及之后的版本中,借助Stream流,我们可以更加优雅的写出如下代码:


/**
 * 【Stream方式】
 * 从给定句子中返回单词长度大于5的单词列表,按长度倒序输出,最多返回3个
 *
 * @param sentence 给定的句子,约定非空,且单词之间仅由一个空格分隔
 * @return 倒序输出符合条件的单词列表
 */
public List<String> sortGetTop3LongWordsByStream(@NotNull String sentence) {
    return Arrays.stream(sentence.split(" "))
            .filter(word -> word.length() > 5)
            .sorted((o1, o2) -> o2.length() - o1.length())
            .limit(3)
            .collect(Collectors.toList());
}

直观感受上,Stream的实现方式代码更加简洁、一气呵成。很多的同学在代码中也经常使用Stream流,但是对Stream流的认知往往也是仅限于会一些简单的filtermapcollect等操作,但JAVA的Stream可以适用的场景与能力远不止这些。

个人博客园首页icon-default.png?t=O83Ahttps://www.cnblogs.com/xiaomingnoone

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

忆嫚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值