Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何迭代并用另一个对象属性替换对象中的内部列表属性_Java_Spring_Java 8 - Fatal编程技术网

Java 如何迭代并用另一个对象属性替换对象中的内部列表属性

Java 如何迭代并用另一个对象属性替换对象中的内部列表属性,java,spring,java-8,Java,Spring,Java 8,我想使用目标上的原始值替换状态字符串。 由标识符addressId 对象结构 Person: String name List<Address> address Address: String addressId String city String state Person originPerson = new Person(); originPerson.setName("Jon"); List<Address> address = new

我想使用目标上的原始值替换
状态
字符串。 由标识符
addressId

对象结构

Person:
String name
List<Address> address

Address:
String addressId
String city
String state


Person originPerson = new Person();
originPerson.setName("Jon");

List<Address> address = new ArrayList();
Address address = new Address();
address.setAddressId("1");
address.setCity("Malibu");
address.setState("CA");
originPerson.setAddress(address);


Person destinationPerson = new Person();
destinationPerson.setName("Jon");

List<Address> address = new ArrayList();
Address address = new Address();
address.setAddressId("1");
address.setCity("Malibu");
address.setState("MI");
destinationPerson.setAddress(address);
在本例中,我希望使用源CA替换目标中的状态MI


我在网上搜索了几个问题,但无法解决。谢谢。

根据您所描述的内容,类似的方法应该可以工作(如果您完全确定API响应不能有null或空的源地址,并且地址ID将始终具有匹配项)

公共人员状态替换器(人员来源、人员目的地){
布尔hasOneAddress=origin.getAddress().size()=1;
如果(hasOneAddress){
字符串newState=origin.getAddress().get(0.getState();
for(地址:destination.getAddress()){
地址:setState(newState);
}
}
否则{
Map addressIdStateMap=新HashMap();
for(地址:origin.getAddress()){
addressIdStateMap.put(address.addressId,address.state);
}
for(地址:destination.getAddress()){
address.setState(addressIdStateMap.get(address.addressId));
}
}
返回目的地;
}

对不起,我不太清楚我是否理解您的问题,您能否澄清一下您期望的最终结果?假设此人(目的地)有许多不同州名的地址。我想将所有这些州名替换为州名和个人(来源)。我现在已经编辑了结构。为什么第二个人对象被传递到stateReplacer只是为了检索新的状态?它不应该像stateplacer(Person,stringnewstate)一样吗?这将使代码更易于实现:只需address.setState(newState),其中//代码为。新状态包含在从外部API接收的带有其他消息的源中。此源对象可以有0个或多个地址吗?在这种情况下,如何选择状态?感谢将验证并接受。
public Person stateReplacer(Person destination, Person origin){
        origin.getAddress().forEach(address -> {
            //CODE
        });
        return destination;
}
public Person stateReplacer(Person origin, Person destination){
    boolean hasOneAddress = origin.getAddress().size() == 1;
    if (hasOneAddress) {
        String newState = origin.getAddress().get(0).getState();
        for (Address address : destination.getAddress()) {
            address.setState(newState);
        }
    }
    else {
        Map<String, String> addressIdStateMap = new HashMap<>();
        for (Address address : origin.getAddress()) {
            addressIdStateMap.put(address.addressId, address.state);

        }
        for (Address address : destination.getAddress()) {
            address.setState(addressIdStateMap.get(address.addressId));
        }
    }
    return destination;
}