java8的stream操作
今天有人问我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++中的指针操作;我用一个小实验告诉他的结论:
List<Person> la = new ArrayList<>();
for(int i=0;i<10;i++) {
Person ads = new Person();
ads.Name="i"+i;
if(i%2 == 0)
ads.Female = true;
la.add(ads);
}
List<Person> list3 = la.stream().filter(p -> p.Female).collect(Collectors.toList());
list3.stream().forEach(a-> System.out.println(a.Name.toString()+":"+a.Female));
List<Person> list4 = list3.stream().filter(p -> p.Female).collect(Collectors.toList());
list4.stream().forEach(a-> System.out.println(a.Name.toString()+":"+a.Female));
System.out.println("====================");
list4.get(0).Female = false;
list3.stream().forEach(a-> System.out.println(a.Name.toString()+":"+a.Female));
list4.stream().forEach(a-> System.out.println(a.Name.toString()+":"+a.Female));
la.stream().forEach(a-> System.out.println(a.Name.toString()+":"+a.Female));结论:也被修改了。
页:
[1]