第九天Java基础(Stream流)

第九天Java基础(Stream流)

1. Stream流

解决集合和数组的遍历问题
在这里插入图片描述

1.1 获取流

1.所有的colletion集合都可以,使用stream流

		//1.list集合
        List<String> list = new ArrayList<>();
        Stream<String> stream = list.stream();
        //2.set集合
        Set<String> set = new HashSet<>();
        Stream<String> stream1 = set.stream();
        //3.map集合方式一
        Map<String,String> map = new HashMap<>();
        Set<String> strings = map.keySet();
        Stream<String> stream2 = strings.stream();
        //3.map集合方式二
        Set<Map.Entry<String, String>> entries = map.entrySet();
        Stream<Map.Entry<String, String>> stream3 = entries.stream();

2.Stream中提供的静态方法of(…);参数可变,也可以传递数组

Integer []i = {1,2,3,4,5};
        Stream<Integer> i1 = Stream.of(i);

1.2 常用的方法

1.forEach(Consumer接口);//遍历、Consumer属于消费型接口、没有返回值、所以forEach方法属于终结方法、参数可以使用Lambda表达式书写。
非终结方法(终结)

Stream<String> stream = Stream.of("A","B","C");
stream.forEach((name)->System.out.prinln(name))

2.filter(Predicate);//过滤,Predicate属于元素判断型接口,有返回值,所以属于非终结方法(延迟)

public static void main(String[] args) {
        ArrayList<String> arr = new ArrayList<>();
        arr.add("张无忌");
        arr.add("张三丰");
        arr.add("曾阿牛");
        arr.add("张大头");
        arr.stream().filter(name -> name.startsWith("张"))//1.对“张”进行筛选
                .filter(name->name.length()==3)//2.对长度为3的进行筛选
                .forEach(name-> System.out.println(name));
    }

3.map();\映射、类型转化(延迟)

Stream<String> stream = Stream.of("1","1","1","2");//将一个String类型的数组
        Stream<Integer> stream1 = stream.map((String s) -> {
            return Integer.parseInt(s);//转化为Integer类型
        });

4.count();//方法统计元素个数,返回lang类型数据,(终结)
5.limit(long n);//取用前几个,截取前几个元素,(延迟)
6.skip(long n);//跳过前几个元素,截取后面的。(延迟)
7.concat(Stream a,Stream b);//组合两个Stream,返回一个新的Stream 流。静态的方法,可以使用类名调用。

1.3 特点

属于管道流,第一个流调用方法后,进入第二流,第一个流就关闭了,就像流水线

练习:
one集合中抽取长度为3的元素放入one1集合中,
one1集合抽取前三个放入one2集合中。
tow集合中抽取开头为”张“的元素放入tow1集合中,
tow1集合抽取三后面的元素放入tow2集合中。
one2加tow2集合产生新集合,集合转化为对象集合

1.普通for循环

ArrayList<String> one = new ArrayList<>();
        one.add("艾AA");
        one.add("曾大爷");
        one.add("逻辑");
        one.add("丁怡");
        one.add("云天明");
        one.add("刘慈欣");
        one.add("张云雷");
        ArrayList<String> one1 = new ArrayList<>();
        for (String name:
                one) {
            if (name.length()==3){
                one1.add(name);
            }
        }
        ArrayList<String> one2 = new ArrayList<>();
        for (int i = 0 ; i < 3;i++) {
            one2.add(one1.get(i));
        }
        ArrayList<String> tow = new ArrayList<>();
        tow.add("张二大爷");
        tow.add("张三");
        tow.add("张无忌");
        tow.add("李云迪");
        tow.add("尼古拉斯赵四");
        tow.add("云天明");
        ArrayList<String> tow1 = new ArrayList<>();
        for (String s : tow) {
            if(s.startsWith("张")){

                tow1.add(s);
            }
        }
        ArrayList<String> tow2 = new ArrayList<>();
        for(int i=0 ; i < 3 ; i++){
            tow2.add(tow1.get(i));
        }
        ArrayList<Penter> three = new ArrayList<>();
        for (String s : one2) {
            three.add(new Penter(s));
        }
        for (String s : tow2) {
            three.add(new Penter(s));
        }

        for (Penter penter : three) {
            String string = penter.toString();
            System.out.println(string);
        }

    }

2.Stream流

 ArrayList<String> one = new ArrayList<>();
        one.add("艾AA");
        one.add("曾大爷");
        one.add("逻辑");
        one.add("丁怡");
        one.add("云天明");
        one.add("刘慈欣");
        one.add("张云雷");
        Stream<String> limitA = one.stream().filter((name) -> name.length() == 3).limit(3);

        ArrayList<String> tow = new ArrayList<>();
        tow.add("张二大爷");
        tow.add("张三");
        tow.add("张无忌");
        tow.add("李云迪");
        tow.add("尼古拉斯赵四");
        tow.add("云天明");
        tow.add("张四");
        tow.add("张五忌");
        Stream<String> limitB = tow.stream().filter((name) -> name.startsWith("张")).skip(3);

        Stream<String> concat = Stream.concat(limitA, limitB);
        concat.map((name)->new Penter(name)).forEach((name)-> System.out.println(name));
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值