java - 在单个 map 中执行多个任务是好习惯吗

标签 java spring reactive-programming spring-webflux project-reactor

我是响应式(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/

相关文章:

java - 启动新线程而不是放入队列

java - spring-security oauth2 REST 服务器在错误凭据(400)错误响应中不需要的 Stacktrace

Spring-data-jpa 渴望获取加入和使用分页不起作用

java - spring-jdbc中一个连接可以同时被两个线程持有吗?

java - 如何使用 Spring data-mongodb-reactive 从上限集合中进行流式传输

java - 返回 Mono<Void> 后的方法调用

java - 当给定输入时调用不同类的包?

Java:嵌套树结构

java - 持久化和ormapping之间的关系

javascript - ReactJS 包含或导入自定义或外部 javascript 文件