Stream流

## 什么是Stream流?

在Java 8中,得益于Lambda所带来的函数式编程, 引入了一个全新的Stream流概念。Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。

目的:`用于简化集合和数组操作的API`。

## Stream流思想

1. 先得到集合或者数组的Stream流(就是一根传送带)
2. 把元素放上去
3. 然后就用这个Stream流简化的API来方便的操作元素。

## Stream流初体验

```java
public class StreamDemo {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("迪丽热巴");
        list.add("古力娜扎");
        list.add("ikun");
        list.add("张无忌");
        list.add("张三丰");
        list.add("赵强");
        list.add("lll");
        //【普通方式操作集合/数组】
        System.out.println("=============================【普通方式操作集合/数组】=============================");
        //从集合中找出姓‘张’的放到新集合,zhangList
        ArrayList<String> zhangList = new ArrayList<>();
        for (String s : list) {
            if (s.charAt(0) == '张') {
                zhangList.add(s);
            }
        }
        System.out.println(zhangList);
        //2, 找出名称长度是3的姓名,放到新集合list3
        ArrayList<String> list3 = new ArrayList<>();
        for (String s : list) {
            if (s.length() == 3) {
                list3.add(s);
            }
        }
        System.out.println(list3);
        //【Stream操作集合/数组】
        System.out.println("=============================【Stream操作集合/数组】=============================");
        //list.stream().filter(s -> s.startsWith("张")).filter(s -> s.length()==3);  //s 表示集合或数组中的每一项元素,自定义名称;filter:过滤元素
        list.stream().filter(s -> s.startsWith("张") && s.length() == 3).forEach(s -> System.out.println(s));
    }
}
```

```tex
结果:
=============================【普通方式操作集合/数组】=============================
[张无忌, 张三丰]
[张无忌, 张三丰, lll]
=============================【Stream操作集合/数组】=============================
张无忌
张三丰
```

## 获取Stream流

创建一条流水线,并把数据放到流水线上准备进行操作【通过集合或数组生成Stream流对象】

| 数据类型 | 名称                                          | 说明                            |
| -------- | --------------------------------------------- | ------------------------------- |
| 集合     | default Stream<E> stream()                    | 获取当前集合对象的Stream流      |
| 数组     | public static <T> Stream<T> stream(T[] array) | 获取当前数组的Stream流          |
| 数组     | public static<T> Stream<T> of(T... values)    | 获取当前数组/可变数据的Stream流 |

```java
public static void main(String[] args) {
        /*-------------------------------------Collection集合获取Stream流-----------------------------------------------*/
        ArrayList<String> list = new ArrayList<>();
        Stream<String> stream = list.stream();

        /*-------------------------------------Map集合获取Stream流-----------------------------------------------*/
        HashMap<Object, Object> maps = new HashMap<>();
        //键流
        Stream<Object> keyStream = maps.keySet().stream();
        //值流
        Stream<Object> valueStream = maps.values().stream();
        //键值对流(拿整体)
        Stream<Map.Entry<Object, Object>> keyAndValueStream = maps.entrySet().stream();

        /*-------------------------------------数组获取Stream流-----------------------------------------------*/
        String[] names = {"张三", "李四", "赵五", "王五"};
        Stream<String> nameStream = Arrays.stream(names);
        Stream<String> nameStream2 = Stream.of(names);
}
```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值