risc-v中文社区

 找回密码
 立即注册
查看: 1013|回复: 0

[经验] java8的stream操作

[复制链接]

347

主题

564

帖子

2237

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2237
发表于 2022-5-20 22:09:36 | 显示全部楼层 |阅读模式
今天有人问我java8中的stream操作,大致问题就是:
一个List<Person> persons,通过persons.stream().filter(...).collection(Collectors.toList())就能获得另一个List<Person> newpersons,
如果修改newpersons中的某个元素即Person的name或age,原初的persons的对应元素Person的name或age会不会也被修改了呢?
如果也被修改,那就说明stream的操作就相当于C/C++中的指针操作;我用一个小实验告诉他的结论:
  1. List<Person> la = new ArrayList<>();
  2.         for(int i=0;i<10;i++) {
  3.             Person ads = new Person();
  4.             ads.Name="i"+i;
  5.             if(i%2 == 0)
  6.                 ads.Female = true;
  7.             la.add(ads);
  8.         }
  9.         List<Person> list3 = la.stream().filter(p -> p.Female).collect(Collectors.toList());
  10.         list3.stream().forEach(a-> System.out.println(a.Name.toString()+":"+a.Female));
  11.         List<Person> list4 = list3.stream().filter(p -> p.Female).collect(Collectors.toList());
  12.         list4.stream().forEach(a-> System.out.println(a.Name.toString()+":"+a.Female));
  13.         System.out.println("====================");
  14.         list4.get(0).Female = false;
  15.         list3.stream().forEach(a-> System.out.println(a.Name.toString()+":"+a.Female));
  16.         list4.stream().forEach(a-> System.out.println(a.Name.toString()+":"+a.Female));
  17.         la.stream().forEach(a-> System.out.println(a.Name.toString()+":"+a.Female));
复制代码
结论:也被修改了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



Archiver|手机版|小黑屋|risc-v中文社区

GMT+8, 2024-5-4 09:01 , Processed in 0.014076 second(s), 17 queries .

risc-v中文社区论坛 官方网站

Copyright © 2018-2021, risc-v open source

快速回复 返回顶部 返回列表