Java8 stream流 生成新的集合,那么新集合里面的值是否为原值呢

1、map中进行set操作是否会影响原集合中的数据?会。同理,filter、peek、foreach中set操作都会影响原集合的数据。例如:

SysNotice notice1 = new SysNotice();
notice1.setNoticeTitle("测试1");
notice1.setCreateTime(LocalDateTime.now());
SysNotice notice2 = new SysNotice();
notice2.setNoticeTitle("测试2");
notice2.setCreateTime(LocalDateTime.now());

List<SysNotice> list = new ArrayList<>();
list.add(notice1);
list.add(notice2);

List<SysNotice> list1 = list.stream().map(c -> {
    c.setNoticeTitle("xxxxx");
    return c;
}).collect(Collectors.toList());

System.out.println(list);

运行结果:

【注意】:若不加collect(Collectors.toList())则不会修改原集合,因为stream只在遇到终结操作的时候才会执行,比如:

        List.of(1, 2, 3).stream()
                .filter(i -> i > 2)
                .peek(System.out::println);

 这么一段代码是不会执行的,因为filter方法和peek方法都是转换流方法,所以不会触发执行。

2、若不想影响原集合的数据,应该怎么做?重新new一个对象即可。例如:

 public static void main(String[] args) {
        List<Person> originalList = new ArrayList<>();
        originalList.add(new Person("Alice", 1));
        originalList.add(new Person("Bob", 2));
        originalList.add(new Person("Charlie", 1));
        originalList.add(new Person("David", 2));

        List<Person> newList = originalList
                .stream()
                .map(person -> new Person(person.getName(), person.getSex() == 1 ? "男" : "女"))
                .collect(Collectors.toList());
        System.out.println(originalList);
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值