如何在java中映射批量请求响应

如何在java中映射批量请求响应,java,spring,java-8,Java,Spring,Java 8,我们将使用支持bulkGETOperations的第三方RESTAPI服务,在发送请求之前,我们需要为数组中的每个元素分配一个唯一的id(bid),如果成功(200 OK),将返回相同的id作为响应 有人能帮助我根据请求中传递的唯一出价映射响应的方式/最有效的方式吗?映射后,我需要根据特定条件在数据库中存储各个字段。下面是请求JSON示例,以下格式的回复将相同,但将包含每个学校的其他字段 "testList": [ { "schoolId

我们将使用支持bulkGETOperations的第三方RESTAPI服务,在发送请求之前,我们需要为数组中的每个元素分配一个唯一的id(bid),如果成功(200 OK),将返回相同的id作为响应

有人能帮助我根据请求中传递的唯一出价映射响应的方式/最有效的方式吗?映射后,我需要根据特定条件在数据库中存储各个字段。下面是请求JSON示例,以下格式的回复将相同,但将包含每个学校的其他字段

"testList": [
      {
        "schoolIdentifier": {
          "schoolId": "abc",
          "schoolName": {
            
            "name": "ABC"
          }
         },
        "bid": 1
        
      },
      {
        "schoolIdentifier": {
          "schoolId": "bbb",
          "schoolName": {
            
            "name": "BCD"
          }
         },
        "bid": 2
        
      }
    ]

注意:我知道这可以通过Map来完成,但是使用java8寻找有效的解决方案,您可以使用merge来查找和添加响应字段。假设您所在的学校班级包含所有请求和响应字段,并且由bid id映射

static Map<Integer, School> merge(Map<Integer, School> request, Map<Integer, School> response) {
    Map<Integer, School> combined = new HashMap<>(request);
    response.forEach(
      (key, value) -> combined.merge(key, value, (req, resp) -> /** map additional fields from response **/ ));
    return combined;
}
静态映射合并(映射请求、映射响应){
Map combined=新的HashMap(请求);
答复:forEach(
(key,value)->combined.merge(key,value,(req,resp)->/**映射响应中的其他字段**/);
综合收益;
}
我假设您收到的响应已经包含了一个School对象中所需的所有内容,并且您只需要高效地将列表响应转换为一个Map(以key作为bid)

您将获得一个列表
testList
,其中包含bid和学校对象。您只需将列表转换为地图,如下所示:

 Map<Integer, SchoolDto> map = testList.parallelStream().collect(
            Collectors.toMap(bidSchoolDto -> bidSchoolDto.getBid()
                    , bidSchoolDto -> bidSchoolDto.getSchool()));
Map Map=testList.parallelStream().collect(
Collectors.toMap(bidSchoolDto->bidSchoolDto.getBid()
,bidSchoolDto->bidSchoolDto.getSchool());

您尝试过什么?你衡量过不同技术的表现吗?你是从地图开始还是在缓存中?嗨,我尝试过地图,但是我在寻找java 8流解决方案,如果请求的有效载荷不能改变,考虑使用下面的代码>类BulkReave{{清单};}<代码> >代码>类学校出价{学校;int投标;}<代码>然后在收到请求后,创建一个
Map perbidschool请求
(可以使用
groupingBy
映射
)。在此之前,您需要迭代此
映射的条目,并将请求转换为每个键的响应。
 Map<Integer, SchoolDto> map = testList.parallelStream().collect(
            Collectors.toMap(bidSchoolDto -> bidSchoolDto.getBid()
                    , bidSchoolDto -> bidSchoolDto.getSchool()));