flatmap在Java中的使用

flatmap在Java中的使用,java,mono,flatmap,Java,Mono,Flatmap,我对Java完全陌生。我正在编写一个API来更新MongoDB中的用户-客户映射详细信息 如果Mongo中已有记录,则需要更新该记录。 如果记录不存在,则需要插入新记录 API的有效负载是类似的 { userid : "ABC", customers :{ cmpId : "customer1", cmpid : "customer2" } } Mongo中的记录与上述结构类似。 如果我们第一次输入“ABC”的

我对Java完全陌生。我正在编写一个API来更新MongoDB中的用户-客户映射详细信息 如果Mongo中已有记录,则需要更新该记录。
如果记录不存在,则需要插入新记录

API的有效负载是类似的

{
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
    }
}
public CustomerUserMappingDTO添加数据(CustomerUserMappingDTO主体)
{
Mono existingUser=customerRepository.getUserId(body.getUserId());
if()//如何检查记录是否存在
{   
//更新MongoDB中数据的逻辑
}否则{
//将数据插入MongoDB的逻辑
}
}
我读了一些关于flapMap的内容来检查tupils,但我不知道如何检查它。

有人能帮我吗。非常感谢。

以下是使用
map()
flatMap()的代码示例
您仍然需要替换数据库检查和插入

导入java.util.array;
导入java.util.List;
导入java.util.stream.stream;
类客户{
字符串cmpId;
公共客户(字符串cmpId){
this.cmpId=cmpId;
}
公共字符串getCmpId(){
返回cmpId;
}
}
类CustomerUserMappingDTO{
字符串用户标识;
列出客户名单;
公共CustomerUserMappingDTO(字符串用户ID,列出客户){
this.userid=userid;
这是。顾客=顾客;
}
公共流getCustomerAsstream(){
return customers.stream();
}
}
公共班机{
公共静态void main(字符串[]args){
//我们假设客户foo已经在数据库中
CustomerUserMappingDTO existingUser=新CustomerUserMappingDTO(“abc”,Arrays.asList(新客户(“foo”),新客户(“bar”);
流(现有用户)
.flatMap(CustomerUserMappingDTO::GetCustomerAsstream)
.filter(customer->!customer.getCmpId().equals(“foo”)//检查记录不存在
.map(客户->数据库中缺少客户:“+customer.getCmpId())
.forEach(System.out::println);//插入数据库
}
}
代码会检查
customer.cmpId
是否不是foo,否则会打印一条有用的消息
我还硬输入了我的流,这样你就可以很容易地跟踪完成的操作


由于您只有一个现有用户,我建议将
Stream.of().flatMap()
替换为
existingUser.getCustomersAsStream()

非常感谢您的回复。在我的代码中,existingUser是一个Mono对象。如何读取MonoObject来检查数据是否存在?@CrazyCoder我不知道Mono是什么,它看起来像是来自
reactor
的一个类,我发现了一个关于它的堆栈帖子: