Java 集合之Stream流

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);
    }
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java集合Stream是一种用于对集合进行操作的抽象概念。它可以对集合进行过滤、映射、排序等一系列操作,使得代码更加简洁和优雅。使用默认方法stream()可以生成一个对象,用于对集合进行操作。例如,可以通过List接口的stream()方法生成一个List集合对象,通过Set接口的stream()方法生成一个Set集合对象。 Stream的使用场景非常广泛。在涉及文件操作的情况下,必须使用IO。而对于一些集合的操作,可以使用Stream进行简便和优雅的处理。Stream的代码通常更加简洁和易读,因此在开发非常常见。 Stream的设计主要是为了避免迭代操作带来的性能浪费。相比于传统的迭代操作,使用Stream可以更高效地处理数据。它的设计初衷是为了大数据分析准备的,因此在处理大量数据时性能更好。Stream的基本操作包括过滤、映射、排序等。通过调用相应的方法,可以对的元素进行操作并得到想要的结果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [java 集合stream 详解](https://blog.csdn.net/u012758488/article/details/126269067)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Java-IO/Stream总结](https://download.csdn.net/download/weixin_48415906/88041980)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Java集合--Stream数据](https://blog.csdn.net/qq_43040688/article/details/104161496)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小钟不想敲代码

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

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

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

打赏作者

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

抵扣说明:

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

余额充值