问题描述
我收到了一些电话的回复:
{
"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);
}