java - 如何在 Java `Immutables` 对象的副本中编辑子集合?
问题描述
给定一个@Value.Immutable
包含不可变对象集合的带注释的类,创建一个新副本的最优雅的方法是什么,其中子对象被修改?
例如,给定一家有员工的公司,如果我想将所有员工姓名设置为大写,这是正确的方法,还是有更简单的方法?
Company c1 = ImmutableCompany.builder()
.name("ACME")
.addEmployees(
ImmutableEmployee.builder().name("William Shakespeare").build(),
ImmutableEmployee.builder().name("T.S. Eliot").build()
)
.build();
Company c2 = ImmutableCompany.copyOf(c1).withEmployees(
c1.employees().stream().map(employee ->
ImmutableEmployee.copyOf(employee).withName(employee.name().toUpperCase())).collect(Collectors.toList())
);
assertThat(c2.employees().get(0).name(), equalTo("WILLIAM SHAKESPEARE"));
assertThat(c2.employees().get(1).name(), equalTo("T.S. ELIOT"));
这在我的真实场景中变得相当难以理解,其中正在编辑的属性被埋在距离父节点(公司)三个级别的地方,所以我只是想确保我没有更简单的方法失踪。
解决方案
推荐阅读
- c# - 是否可以立即停止 threading.Timer?
- sql - 在单个子句中使用 IN 进行多个连接
- html - 仅在收到 get 函数的响应后,如何使用 Angular 生成 HTML 页面
- swift - 如何在 Swift 中解决“无法推断通用参数'T'”
- python - 从python中的列表列表中提取列表
- c++ - 在循环内调用 MPI_Reduce 时出现致命错误
- mysql - 创建跨多个列具有相互唯一性的表
- c++ - 为什么编译行错误导致无法找到头文件
- python-3.x - Pyhon 记录 TimedRotatingFileHandler 日志文件锁定功能
- c++ - 错误:变量“Point a”具有初始化程序但类型不完整。我的代码有什么问题?