如何解决Java中flatmap的使用
我对 Java 完全陌生。我正在编写一个 API 来更新 MongoDB 中的用户客户映射详细信息
要求是更新 Mongo 中的记录,如果它已经存在。
如果记录不存在,那么我们需要插入新记录。
API 的 Payload 是类似的。
{
userid : "ABC",customers :{
cmpId : "customer1",cmpid : "customer2"
}
}
Mongo 中的记录类似于上面的结构。
如果我们是第一次输入“ABC”的详细信息,则应插入一条记录。如果存在带有 userid 的记录,那么我们必须遍历客户并添加那些不存在的客户。
所以我在服务层写了这样的东西:
public CustomerUserMappingDTO AddData(CustomerUserMappingDTO body)
{
Mono<CustomerUserMappingDTO> existingUser = customerRepository.getUserId(body.getUserid());
if () // how to check if the record exists
{
// logic to update data in MongoDB
}else {
// logic to insert data to MongoDB
}
}
我已经阅读了有关flapMap的一些内容来检查tupils,但我无法弄清楚如何检查它。
有人能帮我一下吗。非常感谢。
解决方法
这是使用 map()
和 flatMap()
的代码示例
还是需要替换数据库检查和插入
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
class Customer {
String cmpId;
public Customer(String cmpId) {
this.cmpId = cmpId;
}
public String getCmpId() {
return cmpId;
}
}
class CustomerUserMappingDTO {
String userid;
List<Customer> customers;
public CustomerUserMappingDTO(String userid,List<Customer> customers) {
this.userid = userid;
this.customers = customers;
}
public Stream<Customer> getCustomersAsStream() {
return customers.stream();
}
}
public class Main {
public static void main(String[] args) {
// We will suppose Customer foo is already in database
CustomerUserMappingDTO existingUser = new CustomerUserMappingDTO("abc",Arrays.asList(new Customer("foo"),new Customer("bar")));
Stream.<CustomerUserMappingDTO>of(existingUser)
.<Customer>flatMap(CustomerUserMappingDTO::getCustomersAsStream)
.<Customer>filter(customer -> ! customer.getCmpId().equals("foo")) // Check record does not exist
.<String>map(customer -> "Customer missing from database: " + customer.getCmpId())
.forEach(System.out::println); // Insert into database
}
}
代码会检查 customer.cmpId
是否不是 foo,否则会打印出有用的消息
我还硬输入了我的流,以便您可以轻松了解完成了哪些操作
由于您只有一个现有用户,我建议将 Stream.of().flatMap()
替换为 existingUser.getCustomersAsStream()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。