IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> Stream 流关于是否是可读流的验证 -> 正文阅读

[数据结构与算法]Stream 流关于是否是可读流的验证

今天在某个推文中看到说stream流是可读流,类似于数据库查询操作,只能查询数据,不会保存数据。这个说法有悖于我常用stream遍历对象并重新set属性。所以做了个测试程序

package com.logisitics.job.util;

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

public class Test {

    static class A{
        int age;
        String name;

        A(){}

        A(int age,String name){
            this.age = age;
            this.name = name;
        }

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        @Override
        public String toString() {
            return "A{" +
                    "age=" + age +
                    ", name='" + name + '\'' +
                    "内存地址:" + super.toString() +
                    '}';
        }
    }

    public static void main(String[] args) {
        A a = new A(21 , "wxy");
        A b = new A(22 , "xy");
        A c = new A(23 , "y");

        List<A> list = new ArrayList<>();
        list.add(a);
        list.add(b);
        list.add(c);

        list.stream().peek(e-> {
            System.out.println("当前e对象-peek:"+e.toString());
            e.setAge(30);
        }).filter(e -> {
            System.out.println("当前e对象-filter:"+e.toString());
            return true;
        }).collect(Collectors.toList());

        System.out.println("----------");

        for (A a1 : list) {
            System.out.println("当前对象-foreach:"+a1.toString());
        }

        System.out.println("----------");
        List<Integer> list1 = new ArrayList<>(Arrays.asList(1,2,3,4,5));
        list1.stream().peek(e-> {
            System.out.println("当前e对象-peek:"+e.toString() + "值:"+e);
            e = 5;
        }).filter(e -> {
            System.out.println("当前e对象-filter:"+e.toString() + "值:"+e);
            return true;
        }).collect(Collectors.toList());


    }
}

输出值为:

当前e对象-peek:A{age=21, name='wxy'内存地址:com.logisitics.job.util.Test$A@5c0369c4}
当前e对象-filter:A{age=30, name='wxy'内存地址:com.logisitics.job.util.Test$A@5c0369c4}
当前e对象-peek:A{age=22, name='xy'内存地址:com.logisitics.job.util.Test$A@2be94b0f}
当前e对象-filter:A{age=30, name='xy'内存地址:com.logisitics.job.util.Test$A@2be94b0f}
当前e对象-peek:A{age=23, name='y'内存地址:com.logisitics.job.util.Test$A@d70c109}
当前e对象-filter:A{age=30, name='y'内存地址:com.logisitics.job.util.Test$A@d70c109}
----------
当前对象-foreach:A{age=30, name='wxy'内存地址:com.logisitics.job.util.Test$A@5c0369c4}
当前对象-foreach:A{age=30, name='xy'内存地址:com.logisitics.job.util.Test$A@2be94b0f}
当前对象-foreach:A{age=30, name='y'内存地址:com.logisitics.job.util.Test$A@d70c109}
----------
当前e对象-peek:1值:1
当前e对象-filter:1值:1
当前e对象-peek:2值:2
当前e对象-filter:2值:2
当前e对象-peek:3值:3
当前e对象-filter:3值:3
当前e对象-peek:4值:4
当前e对象-filter:4值:4
当前e对象-peek:5值:5
当前e对象-filter:5值:5

首先是针对于对象来说 , 无论是中间操作还是终止操作,都不会改变对象的引用,但可以改变对象中属性的值;且流的操作是从前往后的,不是从后往前。

后针对于普通包装类,以Integer为例子:

是无法改变元素的值的,因为对于Integer来说,其值为固定的(无论Integer值是否大于-128-127)

所以证明了流中元素确实只能读取无法保存数据;

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-30 18:50:35  更:2022-03-30 18:52:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 11:52:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码