模块化html5网站开发,海南网页,网站开发去哪里找,应用网站模板在Java中#xff0c;当我们使用Collectors.groupingBy方法对集合进行分组操作时#xff0c;生成的新映射#xff08;Map#xff09;是基于原始集合#xff08;allItems#xff09;的数据结构和内容创建的。这意味着#xff0c;如果你更改了新的映射allItemMap中的值当我们使用Collectors.groupingBy方法对集合进行分组操作时生成的新映射Map是基于原始集合allItems的数据结构和内容创建的。这意味着如果你更改了新的映射allItemMap中的值例如修改了List的内容这不会直接影响到原始集合allItems。
但是如果FinFreightItemR对象本身是可变对象并且你在映射中的列表中直接修改了这些对象的属性那么虽然allItems集合本身没有变化集合内的引用没有改变但通过这个引用指向的对象内容已经被修改所以看起来就像是原始集合也发生了变化。
总的来说对于原始集合allItems其元素的引用不会因为映射allItemMap的更改而改变但如果修改了这些引用所指向的对象内容则会看到原始集合中相应对象内容的变化。
还有·就是在这个Java 8的流式处理操作中.collect(Collectors.groupingBy(User::getProfitmonth))会创建一个新的Map实例collectMap该映射基于原始集合userList中的元素进行分组。虽然新的映射中的列表List包含的是引用到原始userList中User对象的地址但映射本身以及在映射内部创建的新列表结构都是独立于原userList的新对象。
所以
collectMap这个新映射是分配在不同的内存地址上的。映射中的每个键值对Key-Value所对应的ListUser是新的列表实例它们包含了指向userList中原有User对象的引用。如果你修改了collectMap中的User对象属性由于引用共享这些更改也会反映在原始userList中对应的User对象上。但是如果你添加或删除collectMap中的元素这不会影响到原始userList的大小和内容。 以下是一段实例代码 ListUser userListnew ArrayList();User usernew User();user.setName(wxl);user.setAmount(new BigDecimal(28000));user.setProfitmonth(2024-04);user.setUploadFileName(12-1 HAI SU 7.pdf);User user1new User();user1.setName(wxl);user1.setAmount(new BigDecimal(28000));user1.setProfitmonth(2024-05);user1.setUploadFileName(12-1 HAI SU 7.pdf);User user2new User();user2.setName(wxl);user2.setAmount(new BigDecimal(32000));user2.setProfitmonth(2024-06);user2.setUploadFileName(12-1 HAI SU 7.pdf);userList.add(user);userList.add(user1);userList.add(user2);System.out.println(userList);MapString, ListUser collectMap userList.stream().collect(Collectors.groupingBy(User::getProfitmonth));System.out.println(collectMap);ListUser list collectMap.get(2024-06);list.get(0).setUploadFileName(su7.pdf);collectMap.remove(2024-04);System.out.println(collectMap);System.out.println(userList);我们可以看到运行结果是 可以看到在Map中删除数据之后原List集合中的数据是没有变删除的但是如果对元素进行修改的话那原来的List集合元素值也会变。