Java------Stream流

作用:简化操作

步骤

1 得到一条stream流

2 利用流中API操作

在一堆零散数据里面的细节:

可以放相同类型的内容 或者数组 但是数组只能放引用数据类型,不能放基本数据类型,否则基本数据类型会把数组当初一个元素,放到stream中 

 

终结方法

 foreach count toArray:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.function.Consumer;
import java.util.function.IntFunction;

//stream终结方法
public class stream5 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list,"郭佳乐","郭佳乐","郭佳乐","郭佳乐","郭家","郭器","郭乐","佳乐");

//        遍历
        list.stream().forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        });


//        统计
        System.out.println("--------------------------");
        long count = list.stream().count();
        System.out.println(count);

        System.out.println("--------------------------");

//        转化为数组,然后用arrys方法转成字符串放入数组
        Object[] objects = list.stream().toArray();
        System.out.println(Arrays.toString(objects));
        /*IntFunction的泛型:具体类型
        apply中形参:具体流中个数
        apply的返回值:具体类型数组*/

        //toarray中方法参数的作用:创建一个指定类型的数组
        //toarray中方法底层:依次得到流中数据斌且把数据放数组
        //toarray中方法的返回值:是装着流的一个数组。

        String[] strings = list.stream().toArray(new IntFunction<String[]>() {
            @Override
            public String[] apply(int value) {
                return new String[value];
            }
        });
        System.out.println(Arrays.toString(strings));

//lamada表达式、创建一个和流一样长的数组,打印数组
        String[] s1 = list.stream().toArray(v -> new String[v]);
        System.out.println(Arrays.toString(s1));

    }
}

collect注意点:

import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;

public class stream6 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list,"郭佳乐-男-27","郭佳-女-20","佳乐-男-20","郭1-男-20","郭2-男-20","郭3-男-20");

//收集男性信息
        /*1 过滤男性
        2 收集信息并且创建一个新数组Collectors.toList()来储存内容
        3 打印    */
        List<String> collect = list.stream()
                .filter(s -> "男".equals(s.split("-")[1]))
                .collect(Collectors.toList());

        System.out.println(collect);
        System.out.println("---------------");
//        区别在于去重hashset会去重
        Set<String> collect1 = list.stream()
                .filter(s -> "男".equals(s.split("-")[1]))
                .collect(Collectors.toSet());
        System.out.println(collect1);


//        收集到map集合中
        /*
         *   toMap : 参数一表示键的生成规则
         *           参数二表示值的生成规则
         *
         * 参数一:
         *       Function泛型一:表示流中每一个数据的类型
         *               泛型二:表示Map集合中键的数据类型
         *
         *        方法apply形参:依次表示流里面的每一个数据
         *               方法体:生成键的代码
         *               返回值:已经生成的键
         *
         *
         * 参数二:
         *        Function泛型一:表示流中每一个数据的类型
         *                泛型二:表示Map集合中值的数据类型
         *
         *       方法apply形参:依次表示流里面的每一个数据
         *               方法体:生成值的代码
         *               返回值:已经生成的值
         *
         * */
         /*
            collect(Collector collector)            收集流中的数据,放到集合中 (List Set Map)

            注意点:
                如果我们要收集到Map集合当中,键不能重复,否则会报错
       */
        Map<String, Integer> c2 = list.stream().filter(s -> "男".equals(s.split("-")[1]))
                .collect(Collectors.toMap(new Function<String, String>() {
                    @Override
                    public String apply(String s) {
                        return s.split("-")[0];
                    }
                }, new Function<String, Integer>() {
                    @Override
                    public Integer apply(String s) {
                        return Integer.parseInt(s.split("-")[2]);
                    }
                }));
        System.out.println(c2);

//        lamada表达式、
        Map<String, Integer> c3 = list.stream().filter(s -> "男".equals(s.split("-")[1]))
                .collect(Collectors.toMap(
                        s -> s.split("-")[0],
                        s -> Integer.parseInt(s.split("-")[2])
                ));

        System.out.println(c3);


    }
}

 总结




练习:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Map;
import java.util.stream.Collectors;

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

        Collections.addAll(list,"zhangsan,23","lisi,24","wangwu,25");

/*        Map<String, Integer> collect1 = list.stream().filter(s -> Integer.parseInt(s.split(",")[1]) >= 24)
                .collect(Collectors.toMap(new Function<String, String>() {
                                              @Override
                                              public String apply(String s) {
                                                  return s.split(",")[0];
                                              }
                                          },
                        new Function<String, Integer>() {
                            @Override
                            public Integer apply(String s) {
                                return Integer.parseInt(s.split(",")[1]);
                            }
                        }));*/
//lamada表达式
        Map<String, Integer> collect1 = list.stream().filter(s -> Integer.parseInt(s.split(",")[1]) >= 24)
                .collect(Collectors.toMap(
                        s -> s.split(",")[0],
                        s -> Integer.parseInt(s.split(",")[1])
                ));


        System.out.println(collect1);

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值