joe 发表于 2022-5-20 22:09:36

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]
查看完整版本: java8的stream操作