微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在相关对象中插入列表中的每个信息?

如何解决如何在相关对象中插入列表中的每个信息?

我收到了一些电话的回复

{
  "response": [
    {
      "id": "12345678","name": "Name lastName","someBoolean": true
    },{
      "id": "987654321","name": "Name2 lastName2","someBoolean": false
    }
  ]
}

该响应被插入到类 informationResponse 中:

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Builder
@EqualsAndHashCode
    public class informationResponse  {
      private List<information> info = new ArrayList<>();
    }

information 具有字段:

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Builder
@EqualsAndHashCode
    public class information  {
    
      private String id = null;
    
      private String name = null;
    
      private Boolean someBoolean = null;
    
    }

而且我有一个 context 必须包含这个 information 类的列表,但插入到正确的对象中。 该 ID 之前已填写,因此我必须比较来自响应的 ID 并将它们插入到我的 context 中的正确对象中。

我的上下文类:

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Builder
@EqualsAndHashCode
    public class MyContext {
        private information clientOne; //id 12345678
        private information clienteTwo; //id 987654321
    }

那么,如何在上下文中的正确对象中插入来自响应的项目​​?

类似:

if(myContext.getClientOne().getId().equals(response.getId()) {
  // set the fields here
}

解决方法

可以实现通过 id 查找 Information 实例的方法并用于填充上下文:

public static Optional<Information> findInfoById(List<Information> list,String infoId) {
    return list.stream()
               .filter(i -> infoId.equals(i.getId()))
               .findFirst();
}

假设 MyContext 类有一个全参数构造函数,字段可以填充为:

List<Information> infoList = informationResponse.getInfo();

MyContext context = new MyContext(
    findInfoById(infoList,"12345678").orElse(null),findInfoById(infoList,"987654321").orElse(null)
);

或使用适当的 getter/setter:

MyContext context; // initialized with clientOne / clientTwo set

List<Information> infoList = informationResponse.getInfo();

findInfoById(infoList,context.getClientOne().getId()).ifPresent(context::setClientOne);
findInfoById(infoList,context.getClientTwo().getId()).ifPresent(context::setClientTwo);
,

我认为您有一个包含预定义对象的上下文。并且您可以从中获取具有特殊 ID 的对象

Information getInformationFromContext(int id){
    ...
    return information;
}

并且您需要从信息响应中读取数据并使用此数据更新上下文中的每个对象:

void process(){
Consumer<Information>  setContext = 
    information -> getInformationFromContext(information.getId()).setFields(...);

List<Information> informations = informationResponse.getInfo();

informations.forEach(setContext);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。