如何使用迭代器在map数组中设置值

问题描述 投票:0回答:1

我是 JAVA 初学者,正在尝试学习数据结构和对象转换。我的 yaml 文件中有以下数据结构。

ingress: {backendServiceName: serv-abc-lc002, cluster_issuer: letsencrypt-oe-dev-001,
  ingressClassName: nginx-lc002, tls_acme: 'true'}
route:
  hosts:
    abcygyPM:
      active: false
      host: cir11.abc.com
      logicalclustername: lc002
      offboardtimestamp: null
      physicalclustername: oe-dev-001
      region: us-east-1
      status: Triggered
      timestamp: |-
        {
          "timestamp": "2024-02-05T14:43:18.00847359Z"
        }
    hXDmziFYnT:
      active: false
      host: sign.abc.com
      logicalclustername: lc002
      offboardtimestamp: null
      physicalclustername: oe-dev-001
      region: us-east-1
      status: Triggered
      timestamp: |-
        {
          "timestamp": "2024-02-08T05:45:35.615793284Z"
        }

使用snakeyaml库,我能够在POJO中加载yaml内容

public static void main(String[] args) throws FileNotFoundException {
    // TODO Auto-generated method stub

    InputStream inputStream = new FileInputStream(new File("C:\\Automation\\values.yaml"));

    Yaml yamlrm = new Yaml(new Constructor(Values1.class));

    Values1 datarm = yamlrm.load(inputStream);
    String url = "cir11.abc.com";

    Iterator<Entry<String, Host>> iterator = datarm.getRoute().getHosts().entrySet().iterator();
    while (iterator.hasNext()) {
        if (iterator.next().getValue().getHost().equals(url)) {
       
         << need to write the code here >> ??

        }

    }

}

Host.java 

公开课主持人{

private String host;
private String physicalclustername;
private String logicalclustername;
private String status;
@Expose
private String onboardtimestamp;
private String offboardtimestamp;
private boolean active;

<>

}

Values1.java

public class Values1 {
    
    private Route route;
    private Ingress ingress;

<<getter setter >>

}


Route.java


public class Route {

      private Map<String, Host> hosts;

<<geter setter>>
}

我想做的是,如果

active
匹配到
true
,则将字段
url
的值设置为
"cir11.abc.com"
我了解了迭代器,但无法理解,如何使用迭代器来设置 hashmap 数组中的值

如果不通过迭代器,如何设置值,请建议

java snakeyaml
1个回答
0
投票

运行条目时,您只需设置

active
属性:

   Iterator<Entry<String, Host>> iterator = datarm.getRoute().getHosts().entrySet().iterator();
   while (iterator.hasNext()) {
       Host host = iterator.next().getValue().getHost();
       if (host.equals(url)) {
            host.setActive(true);
       }
   }

您可以通过在映射条目上使用 for 循环而不是 while 来进一步优化代码:

   for (Map.Entry<String, Host> entry : datarm.getRoute().getHosts()) {
     if (entry.getValue().getHost().equals(url)) {
       entry.getValue().setActive(true);
     }
   }
© www.soinside.com 2019 - 2024. All rights reserved.