【博学谷学习记录】超强总结,用心分享|JavaSE语法week8

目录

Stream流

Stream流的三类方法

Stream流的获取方法

Stream的filter方法

Stream流中间操作方法

limit方法和skip方法

concat方法和distinct方法

Stream流终结操作方法

Stream流的收集操作


Stream流

Stream流的三类方法

1.获取Stream流        2.中间方法        3.终结方法

Stream流的获取方法

单列集合:

                Colection接口中的默认方法stream()生成流

      代码:default Stream<E> stream()

                 集合对象.stream()

双列集合:

                间接的生成流

                可以先通过keySet或者entrySet获取一个Set集合,再获取Stream流

                keySet:先获取所有的键,再把这个Set集合中所有的键放到Steam流中

      代码:集合对象.keySet().stream()

                集合对象.entrySet().stream()

数组:       

                Arrays中的静态方法stream生成流

     代码:Arrays.stream(数组名)

同类数据类型的多个数据:

                Stream.of(数据1,数据2,数据3)

Stream的filter方法

filter方法会获取流中的 每一个数据
而test方法中的s,就会一次表示流中的每一个数据
只需要在test方法中对s进行判断就可以了
如果结果为true,则当前的数据留下
如果判断的结果为false,则当前数据就不要

ArrayList<String> WoManActors = new ArrayList<>();

        WoManActors.add("郑爽");
        WoManActors.add("李冰冰");
        WoManActors.add("杨宁");
        WoManActors.add("薇苇");
        WoManActors.add("杨敏");
        WoManActors.add("赵紫薇");

Stream<String> woman = WoManActors.stream().filter(s -> s.startsWith("杨"));

//结果为:判断以杨字开始的名字,杨宁和杨敏

Stream流中间操作方法

Stream<T> filter(条件判断):用于对流中的数据进行过滤

Stream<T> limit(长度):返回此流中的元素组成的流,截取前指定参数个数的数据

Stream<T> skip(long n):跳过指定参数个数的数据,返回由该流的剩余元素组成的流

static <T> Stream<T> concat(Stream a, Stream b):合并a和b两个流为一个流

Stream<T> distinct():返回由该流的不同元素(根据Object.equals(Object) )组成的流

limit方法和skip方法

    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();

        list.add("张无忌");
        list.add("王二麻子");
        list.add("谢广坤");
        list.add("二麻子");
        list.add("三丰");
        list.add("张丰");
        list.add("李四");
        list.add("王五");
        list.add("老刘");
        list.add("老六");
        list.add("老七");
        list.add("老八");
        list.add("嗨嗨嗨");


        Stream<T> limit(long maxSize):截取指定参数个数的数据,保留前面的
      list.stream().limit(2).forEach(s-> System.out.println(s));
//
        Stream<T> skip(long n):跳过指定参数个数的数据,跳过前面的
       list.stream().skip(2).forEach(s-> System.out.println(s));

concat方法和distinct方法

ArrayList<String> list2 = new ArrayList<>();
        ArrayList<String> list = new ArrayList<>();

        list.add("张无忌");
        list.add("王二麻子");
        list.add("谢广坤");
        list.add("二麻子");
        list.add("张三丰");

        list2.add("张无忌");
        list2.add("王二麻子");
        list2.add("谢广坤");
        list2.add("二麻子");
        list2.add("张三丰");

        Stream<String> stream = list.stream();
        Stream<String> stream2 = list2.stream();

       //合并stream和stream2并打印出来
       Stream.concat(list.stream(),list2.stream()).forEach(s-> System.out.println(s));
       //打印每一个元素但不能重复
       list.stream().distinct().forEach(s-> System.out.println(s));

Stream流终结操作方法

void forEach():对此流的每个元素执行操作

long count():返回此流中的元素数

ArrayList<String> list = new ArrayList<>();

        list.add("张无忌");
        list.add("王二麻子");
        list.add("谢广坤");
        list.add("二麻子");
        list.add("刘备");
        list.add("张飞");
        list.add("张翠华");
        list.add("王二麻子");
        list.add("张良");
//        methodForEach(list);

        //count():返回此流中的元素数
        long count = list.stream().count();
        System.out.println(count);

        //打印list流中的所有元素
        list.stream().forEach(s-> System.out.println(s));

Stream流的收集操作

对数据使用Stream流的方式操作完毕后,可以把流中的数据收集到集合中

R collect(Collector collector) :把结果收集到集合中

工具类方法名:

public static <T> Collector toList():把元素收集到List集合中

public static <T> Collector toSet():把元素收集到Set集合中

public static Collector toMap(keyMapper,valueMapper):把元素收集到Map集合中

public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();

        for (int i = 0; i <=10 ; i++) {
            list.add(i);
            list.add(10);
            list.add(10);
            list.add(10);
            list.add(10);
            list.add(10);
            list.add(10);
            list.add(10);
        }

        //filter负责过滤数据得
        //collect负责收集数据
        //获取流中剩余得数据,但是他不负责创建容器,也不负责把数据添加到容器中
        //Collectors.toList():在底层会创建一个List集合,并把所有得数据添加到List集合中
        List<Integer> collect = list.stream().filter(number -> number % 2 == 0).collect(Collectors.toList());

        System.out.println(collect);

        Set<Integer> set = list.stream().filter(number -> number % 2 == 0).collect(Collectors.toSet());

        System.out.println(set);
    }
public static void main(String[] args) {
      	ArrayList<String> list = new ArrayList<>();
        list.add("zhangsan,23");
        list.add("lisi,24");
        list.add("wangwu,25");

        Map<String, Integer> map = list.stream().filter(
                s -> {
                    String[] split = s.split(",");
                    int age = Integer.parseInt(split[1]);
                    return age >= 24;
                }
        ).collect(Collectors.toMap(
                s -> s.split(",")[0],
                s -> Integer.parseInt(s.split(",")[1]) ));
        System.out.println(map);
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值