流式处理Stream

1. Stream 常用方法
接口用途
forEach循环遍历
mapmap方法用于映射每个元素到对应的结果
filterfilter方法用于获取指定数量的流
limitlimit方法用于获取指定数量的流
sortedsorted方法用于对流进行排序
CollectorsCollectors 类实现将流转换成集合和聚合元素
2. Stream流的五种创建方式
/**
 * Stream 流对象的五种创建方式
 *
 */
public class StreamGenerator {
    // 基于数组进行创建
    @Test
    public void generator1(){
        String []arr = {"Lili", "Andy", "Jackson", "Smith"};
        // 用Stream.of(arr) 把arr这个数组变量转化为一个流式类型
        Stream <String> stream = Stream.of(arr);
        stream.forEach(s-> System.out.println(s));
    }

    @Test
    // 基于集合进行创建
    public void generator2(){
        List<String> list = new ArrayList<String>();
        list.add("Lili");
        list.add("Andy");
        list.add("Jackson");
        list.add("Smith");
        Stream stream = list.stream();
        stream.forEach(s-> System.out.println(s));
    }

    @Test
    /**
     * 基于generator方法创建无限长度流
     */
    public void generator3(){
        Stream<Integer> s = Stream.generate(()-> new Random().nextInt(10000));
        s.limit(10).forEach(i-> System.out.println(i));
    }

    @Test
    /**
     * 基于迭代序列创建流  iterator两个参数:1.起始数据  2.每一个步长
     * 自增整数序列
     */
    public void generator4(){
         Stream stream = Stream.iterate(1, n->n+1);
         stream.limit(10).forEach(s-> System.out.println(s));
    }

    @Test
    /**
     * 基于字符序列创建流,对字符进行加工
     */
    public void generator5(){
        String str = "abcdefg我的";
        IntStream stream = str.chars();
        stream.forEach(c-> System.out.println((char)c));
    }
}
3. Stream的常用方法实例
public class StreamMethod {
    @Test
    /*
    提取集合中所有偶数并求和
     */
    public void demo1(){
        List<String> list = Arrays.asList("1", "2", "3", "4", "5");
        int sum = list.stream()    // 获取stream对象
                .mapToInt(s-> Integer.parseInt(s))  //mapToInt将流中每一个数据转为整数
                .filter(n-> n%2 == 0)    //filter对数据进行过滤
                .sum();
        System.out.println(sum);

    }

    @Test
    /*
    所有名字首字母大写
     */
    public void demo2(){
        List<String> list = Arrays.asList("lili", "andy", "jackson", "smith");
        //直接修改原始集合中的数据
        list.stream()
                .map(s-> s.substring(0, 1).toUpperCase() + s.substring(1))  //按规则对每一个数据流进行转换
                .forEach(s-> System.out.println(s));
        //把生成的数据放入一个新的list中
        List<String> newlist = list.stream()
                .map(s-> s.substring(0, 1).toUpperCase()+s.substring(1))
                //Collect对数据流进行收集生成新的list/set
                .collect(Collectors.toList());
        System.out.println(newlist);
    }

    @Test
    /*
    将所有奇数从大到小进行排序,且不许出现重复数据
     */
    public void demo3(){
        List<Integer> list = Arrays.asList(1, 60, 38, 21, 51, 60, 51, 73);
        List<Integer> newlist = list.stream().distinct()     //去除重复的流数据
                .filter(i-> i%2==1)
                .sorted((a, b)->b-a)  //流数据排序
                .collect(Collectors.toList());
        System.out.println(newlist);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值