Java 如何使用springreactor比较两个通量值

Java 如何使用springreactor比较两个通量值,java,spring-boot,spring-webflux,reactive-mongo-java,Java,Spring Boot,Spring Webflux,Reactive Mongo Java,目前我是反应式编程新手, 我已经在两个文档中添加了数据,所以目前我尝试只将这些数据返回给在这两个文档中tokenIdentifier相同的客户机 请参考以下代码: 我有两个收藏 package com.mainApp; import java.util.Date; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; @Doc

目前我是反应式编程新手, 我已经在两个文档中添加了数据,所以目前我尝试只将这些数据返回给在这两个文档中tokenIdentifier相同的客户机

请参考以下代码:

我有两个收藏

package com.mainApp;

import java.util.Date;

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

@Document(value = "Token")
public class TokenData {

    @Id
    private String id;
    
    private String tokenIdentifier;
    
    private Date todayDate;
    
    
    public TokenData(String id, String tokenIdentifier, Date todayDate) {
        super();
        this.id = id;
        this.tokenIdentifier = tokenIdentifier;
        this.todayDate = todayDate;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getTokenIdentifier() {
        return tokenIdentifier;
    }

    public void setTokenIdentifier(String tokenIdentifier) {
        this.tokenIdentifier = tokenIdentifier;
    }

    public Date getTodayDate() {
        return todayDate;
    }

    public void setTodayDate(Date todayDate) {
        this.todayDate = todayDate;
    }

    
    

}
我有一个控制器,它将只返回那些tokenData.GetTokenInIdentifier()==TURCollection.GetTokenInIdentifier()的tokenData

所以

@GetMapping(value=“/getAllToken”)
公共交通{
/*List returnData=new ArrayList();
List tokenData=tokenDataRepository.findAll().collectList().block();
List-turCollection=turRepository.findAll().collectList().block();
turCollection.forEach(tur->{
for(TokenData数据:TokenData){
if(tur.getTokenIdentifier().equals(data.getTokenIdentifier())){
returnData.add(数据);
}
}
});*/
但是block()代码在反应式编程中不起作用
有谁能帮助我以反应方式比较两个通量的值吗?

您可以使用flux.collectList和Mono.flatMap的组合

Mono<List<TokenData>> tokenData = tokenDataRepository.findAll().collectList();
Mono<List<TURCollection>> turCollection = turRepository.findAll().collectList();
Mono<List<TokenData>> result = turCollection.flatMap(turs ->
  Set<String> ids = turs.stream().map(TURCollection::getId).collect(toSet());
  return tokenData.map(tokens ->
    tokens.stream().filter(token -> ids.contains(token.getId())).collect(toList())
  );
);
Mono-tokenData=tokenDataRepository.findAll().collectList();
Mono turCollection=turRepository.findAll().collectList();
Mono结果=turCollection.flatMap(turs->
Set id=turs.stream().map(TURCollection::getId).collect(toSet());
返回tokenData.map(令牌->
tokens.stream().filter(token->id.contains(token.getId())).collect(toList())
);
);

谢谢你的回复,但使用这个方法,它只会给出那些getTokenIdentifier()在给定位置相同的记录,就像如果getTokenIdentifier()在第二个索引处相同,那么它只会给出。我的要求是让tokenDataRepository.findAll()有3个getTokenIdentifier()的记录是xyz和turRepository。findAll()有1条记录,其getTokenIdentifier()是xyz。因此,在结果中我应该得到3条记录。简言之,搜索令牌标识符与TURCOllection数据相同的令牌文档中的所有记录。它应该返回令牌文档的所有数据。@FarahnaazPathan检查更新的答案。
@GetMapping(value = "/getAllToken")
    public Flux<TokenData> getToken(){
        /*List<TokenData> returnData = new ArrayList<TokenData>();
        List<TokenData> tokenData = tokenDataRepository.findAll().collectList().block();
        
        List<TURCollection> turCollection = turRepository.findAll().collectList().block();
        
        turCollection.forEach(tur -> {
            for(TokenData data : tokenData) {
                if(tur.getTokenIdentifier().equals(data.getTokenIdentifier())) {
                    returnData.add(data);
                }
            }
        });*/
Mono<List<TokenData>> tokenData = tokenDataRepository.findAll().collectList();
Mono<List<TURCollection>> turCollection = turRepository.findAll().collectList();
Mono<List<TokenData>> result = turCollection.flatMap(turs ->
  Set<String> ids = turs.stream().map(TURCollection::getId).collect(toSet());
  return tokenData.map(tokens ->
    tokens.stream().filter(token -> ids.contains(token.getId())).collect(toList())
  );
);