Java中List集合Stream流详解

本文来说下Java中List集合Stream流


Stream流介绍

在JDK8时,JAVA新增了lambda表达式,它与 java.io 包里的 InputStream和 OutputStream是完全不同的概念,他更跟流没有任何关系。它也不同于 StAX 对 XML解析的 Stream,也不是 Amazon Kinesis 对大数据实时处理的Stream。

JDK8 中的 Stream 是对集合(Collection)对象功能的增强,它借助于lambda表达式,更优雅的表达风格,极大的提高编程效率和程序可读性。它针对于对集合对象进行各种非常便利、高效的聚合操作,或者大批量数据操作。不多说,上用法。


Stream流实现与传统方式实现对比

案例:找出列表中包含张三且姓名长度为2的名字

传统方式实现

传统方式实现

package com.wideth.util;

import java.util.ArrayList;

public class Main {

    public static void main(String[] args) {

        // 1.定义一个集合
        ArrayList<String> list = new ArrayList<>();
        list.add("张三");
        list.add("张四");
        list.add("王五");
        list.add("赵六");
        list.add("张无忌");
        list.add("张三丰");


        // 2.挑选list中包含张三的
        ArrayList<String> list1 = new ArrayList<>();
        for (String s : list) {
            if (s.startsWith("张三")){
                list1.add(s);
            }
        }
        System.out.println("挑选list包含张三的结果:"+list1);

        // 3.再从list1中挑选挑选名字长度为2的
        ArrayList<String> list2 = new ArrayList<>();
        for (String s : list1) {
            if (s.length() == 2){
                list2.add(s);
            }
        }
        System.out.println("挑选list1长度为2的结果:"+list2);

        // 4、遍历
        for (String s : list2) {
            System.out.println("最终结果 = " + s);
        }
    }
}

结果

在这里插入图片描述


Stream流方式实现

Stream流方式实现

package com.wideth.util;

import java.util.ArrayList;

public class Main2 {

    public static void main(String[] args) {

        // 1.定义一个集合
        ArrayList<String> list = new ArrayList<>();
        list.add("张三");
        list.add("张四");
        list.add("王五");
        list.add("赵六");
        list.add("张无忌");
        list.add("张三丰");

        //Stream流实现
        list.stream()
                .filter((name) -> name.startsWith("张三"))
                .filter((name) -> name.length()==2)
                .forEach((name) -> System.out.println(name));
    }
}

结果

在这里插入图片描述


Stream流的常用API

stream流的获取

在Collection集合下,均有一个stream(),另一个即是用Stream的一个静态方法 of() 实现

package com.wideth.util;

import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Stream;

public class Main3 {

    public static void main(String[] args) {

        //Collction集合
        Collection<String> collection = new ArrayList();
        Stream<String> stream = collection.stream();
        //List集合
        List<String> list = new ArrayList<>();
        Stream<String> stream1 = list.stream();
        //ArrayList集合
        ArrayList<String> arrayList = new ArrayList<>();
        Stream<String> stream2 = arrayList.stream();
        //LinkedList集合
        LinkedList<String> linkedList = new LinkedList<>();
        Stream<String> stream3 = linkedList.stream();

        //of()方式实现
        List<String> list1 = new ArrayList<>();
        Stream<List<String>> stream4 = Stream.of(list1);
        //传入可变数组
        Stream<String> stream5 = Stream.of("1","2","3","4");
    }
}

forEach方法

遍历流中的对象

package com.wideth.util;

import java.util.ArrayList;

public class Main4 {

    public static void main(String[] args) {

        // 1.定义一个集合
        ArrayList<String> list = new ArrayList<>();
        list.add("张三");
        list.add("张四");
        list.add("王五");
        list.add("赵六");
        list.add("张无忌");
        list.add("张三丰");

        //2.遍历流的对象
        list.stream().forEach((name) -> System.out.println(name));
    }
}


filter方法

filter对流对象进行过滤

package com.wideth.util;

import java.util.ArrayList;

public class Main5 {

    public static void main(String[] args) {

        // 1.定义一个集合
        ArrayList<String> list = new ArrayList<>();
        list.add("张三");
        list.add("张四");
        list.add("王五");
        list.add("赵六");
        list.add("张无忌");
        list.add("张三丰");

        //2.过滤流的对象
        list.stream().filter((name) -> name.length()==3);
    }
}

map方法

map()是对集合中的对象进行映射的,将对象从一种类型转换成另一种类型

package com.wideth.util;

import java.util.ArrayList;

public class Main6 {

    public static void main(String[] args) {

        // 定义一个集合
        ArrayList<String> list = new ArrayList<>();
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");
        list.add("5");
        list.add("6");
        list.add("7");

        //map()是对集合中的对象进行映射的,将对象从一种类型转换成另一种类型
        list.stream().map(num -> Integer.parseInt(num))
                .forEach((num) -> System.out.println(num));;
    }
}

count方法

count是对流数据统计的方法,但是count之后返回的是long类型,所以无法再进行流操作。

package com.wideth.util;

import java.util.ArrayList;

public class Main7 {

    public static void main(String[] args) {

        // 定义一个集合
        ArrayList<String> list = new ArrayList<>();
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");
        list.add("5");
        list.add("6");
        list.add("7");

        //count()对流数据进行统计
        System.out.println(list.stream().count());
    }
}

limit方法

选取流数据的前多少条数据

package com.wideth.util;

import java.util.ArrayList;

public class Main8 {

    public static void main(String[] args) {

        // 定义一个集合
        ArrayList<String> list = new ArrayList<>();
        list.add("李四1");
        list.add("李四2");
        list.add("李四3");
        list.add("李四4");
        list.add("李四5");
        list.add("李四6");
        list.add("李四7");
        //limit() 选取流数据的前多少条数据
        list.stream().limit(2).
                forEach((name) -> System.out.println(name));
    }
}

skip方法

跳过流数据的前多少条数据,该方法与limit()方法刚好相反

package com.wideth.util;

import java.util.ArrayList;

public class Main9 {

    public static void main(String[] args) {

        // 定义一个集合
        ArrayList<String> list = new ArrayList<>();
        list.add("李四1");
        list.add("李四2");
        list.add("李四3");
        list.add("李四4");
        list.add("李四5");
        list.add("李四6");
        list.add("李四7");
        //skip() 跳过流数据的前多少条数据
        list.stream().skip(2).
                forEach((name) -> System.out.println(name));
    }
}

concat方法

Stream的静态方法concat()实现对两个流数据进行合并

package com.wideth.util;

import java.util.ArrayList;
import java.util.stream.Stream;

public class Main10 {

    public static void main(String[] args) {

        // 定义一个集合
        ArrayList<String> list = new ArrayList<>();
        list.add("李四1");
        list.add("李四2");
        list.add("李四3");
        list.add("李四4");
        list.add("李四5");
        list.add("李四6");
        list.add("李四7");
        // 定义一个集合
        ArrayList<String> list1 = new ArrayList<>();
        list1.add("1");
        list1.add("2");
        list1.add("3");
        list1.add("4");
        list1.add("5");
        list1.add("6");
        list1.add("7");
        //concat()实现对两个流数据进行合并
        Stream.concat(list.stream(),list1.stream()).
                forEach((name) -> System.out.println(name));;;

    }
}

本文小结

本文总结了下Java中List集合Stream流相关的知识与内容

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值