[Java][Stream]人名筛选工具->引入stream流简化操作

2023-12-13 14:57:15

?这个小工具的作用很简单:

我已经在list集合中存入了若干个名字,现在我希望能够筛选出以张字开头并且名字是三位的,输出打印这些名字。

逻辑可以拆分一下:

第一步:从所有名字中筛选出含张的 存储到新的集合中

第二步:从新的集合中筛选出名字为3个字的,存到另外一个集合中

第三部:遍历最新的那个集合

在第一步我们涉及了字符串的一个函数StartsWith来判断一个字符串的首字符

在第二步我们使用了字符串的一个函数length来判断字符串的长度

在一二三步中我们均使用了for(元素类型 第三方变量名:需要遍历的集合){}这种增强for的表达形式

但是写完这些内容,我们觉得太繁琐了,因此渴望找到一种更简略的方式来进行筛选。

在JDK8以后出现了stream这个操作

我们可以来分析一下我们是如何使用stream的

第一步:将ArrayList对象转化为stream对象,我们是使用 .stream()来完成的。

第二步:利用filter筛选器+lambda表达式筛选名字是张开头的

第三步:利用filter筛选器+lambda表达式筛选字符串长度为3的

第四步:打印这个部分

新的方法存在一个优越性:你不需要写那么多的增强for循环了 二十多行代码所实现的内容被简化成了一行代码,可以有效的提高代码的可读性和便利性

?

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("张无忌");
        list.add("周芷若");
        list.add("赵敏");
        list.add("张强");
        list.add("张三丰");

        //1.所有以张开头的储存到新集合中
        ArrayList<String> list2 = new ArrayList<>();
        for (String name : list) {
            if (name.startsWith("张")) {
                list2.add(name);
            }
        }
        ArrayList<String> list3 = new ArrayList<>();
        for (String name : list2) {
            if (name.length() == 3) {
                list3.add(name);
            }
        }
        for (String s : list3 ) {
            System.out.println(s);

        }

        //以上所有内容都可以用steam流简化
        list.stream().filter(name->name.startsWith("张")).filter(name->name.length()==3).forEach(name->System.out.println(name));


    }
}

文章来源:https://blog.csdn.net/qq_37511412/article/details/134943188
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。