Java 集合之Stream流

文章介绍了Java中的StreamAPI,如何通过Lambda表达式简化集合和数组的操作。StreamAPI提供了如filter(),limit(),skip()等中间方法进行数据处理,以及forEach(),count(),collect()等终结方法来结束操作并获取结果。文中通过两个案例展示了过滤偶数和构建年龄映射到姓名的Map集合的过程。

Stream的作用

结合了Lambda表达式,简化集合、数组的操作

Stream的使用流程

① 先得到一条Stream流(流水线),并把数据放上去
主要方法:

获取方式方法名说明
单列集合集合名.stream()Collection中的默认方法
双列集合无法直接使用stream流,可以先转成单例
数组public static <\T> Stream<\T> stream(T[] array)Arrays工具类中的静态方法
一堆零散数据public static <\T> Stream<\T> of(T…values)Stream接口中的静态方法

② 使用中间方法对流水线上的数据进行操作
主要方法

filter():过滤 ,limit():获取前几个元素,skip():跳过前几个元素
distinct():元素去重,concat():合并两个stream流,map():转换流中的数据类型

注意事项

1.中间方法,返回新的Stream流,原来的Stream流只能使用一次,建议使用链式编程
2.修改Stream流中的数据,不会影响原来集合或者数组中的数据

③ 使用终结方法对流水线上的数据进行操作
主要方法

名称说明
void forEach()遍历
long count()统计
toArray()收集流中的数据,放到数组中
collect(Collector collector) 示例:collect(Collector.toList)、collect(Collector.toSet)、collect(Collector.toMap)收集流中的数据,放到集合中

几个案例演示

案例一:

    数据过滤
    过滤奇数,保留偶数
    并将结果保存下来

代码演示:

package com.liming.stream;

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

public class Demo02 {
    public static void main(String[] args) {
        /*
         * 数据过滤
         * 过滤奇数,保留偶数
         * 并将结果保存下来
         * */
        //定义集合,添加数据
        ArrayList<Integer> list = new ArrayList<>();
        Collections.addAll(list, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
        //过滤并保存数据
        List<Integer> newList = list.stream()
                .filter(i -> i % 2 == 0)
                .collect(Collectors.toList());
        System.out.println(newList);
    }
}

案例二:

创建一个ArrayList集合,并添加以下字符,字符串前面是姓名,后面是年龄
“zhangsan,23”
“lisi,24”
“wangwu,25”
保留年龄大于等于24的人,并将结果收集到Map集合中,姓名为键,年龄为值

代码演示:

package com.liming.stream;

import java.util.ArrayList;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

public class Demo03 {
    public static void main(String[] args) {
        /*
         * 创建一个ArrayList集合,并添加以下字符,字符串前面是姓名,后面是年龄
         * "zhangsan,23"
         * "lisi,24"
         * "wangwu,25"
         * 保留年龄大于等于24的人,并将结果收集到Map集合中,姓名为键,年龄为值
         * */
        ArrayList<String> list = new ArrayList<>();
        list.add("zhangsan,23");
        list.add("lisi,24");
        list.add("wangwu,25");
        //Collectors.toMap(键的规则,值的规则)
        /*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]);
                    }
                }));*/

        //lambda表达式简写
        Map<String, Integer> map = 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(map);
    }
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小钟佳运

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值