我是响应式(Reactive)编程的新手,我正在寻找在单个映射中执行多个任务的好习惯,或者我应该为每个单个操作创建单独的映射。
方法一
Mono.just(new Hashmap())
.map(m -> {m.put("One"); return m;})
.map(m -> {m.put("Two"); return m;})
.map(m -> {m.put("Three"); return m;})
方法二
Mono.just(new Hashmap())
.map(m -> {
m.put("One");
m.put("Two");
m.put("Three");
return m;
})
那么哪个是最佳实践,对性能有什么特别的影响吗?
让我更清楚地定义它。我想知道的是,在一个 map 中键入多个用途代码是一种很好的做法,或者我应该为每个用途创建 map ,就像我现在有一个用户对象一样,我想更新它的十个字段可能是二十个。
因此,如果我使用单个 map ,我的代码将如下所示。
Mono.just(new User())
.map(user -> {
user.setFirstName("abc");
user.setMiddleName("abc");
user.setLastName("abc");
user.setEmail("abc");
user.setAddress("abc");
// setting twenty more fields.
return user;
});
或者我应该像这样在单独的 map 中完成每个任务
Mono.just(new User())
.map(user-> {user.setFirstName("abc"); return user;})
.map(user-> {user.setMiddleName("abc"); return user;})
.map(user-> {user.setLastName("abc"); return user;})
//twenty more map function called to set each property
哪个是最佳实践?
最佳答案
So which one is best practice is any performance impact specially?
性能在实践中几乎没有什么不同,因为 reactor 内置了可融合优化,这意味着您的多个 map 调用在实践中被融合到一个操作符中。
恕我直言,重点应该放在最清晰阅读的方法上 - 在这种情况下(同样,至少对我而言),它是仅使用一个 map 调用的方法。
然而,另一个更重要的建议是尽可能在整个链中使用不可变对象,而不是直接通过映射调用来改变链中的对象。这并不是 map 调用的真正目的,出于多种原因,以这种方式改变对象是不可取的。对于 POJO,您可能希望使用类似 lombok 的 @With
之类的东西,例如:
Mono.just(new User())
.map(user ->
user.withFirstName("abc")
.withMiddleName("abc")
.withLastName("abc")
.withEmail("abc")
.withAddress("abc")
);
虽然在这个人为设计的示例中它没有任何功能差异,但它更清晰易读,并且“正确地”使用了映射(映射到新值而不是改变现有值)。在现实世界中,它也是因此更不容易出错,并且更容易推断 react 链的状态。
关于java - 在单个 map 中执行多个任务是好习惯吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62615130/