使用 ArrayList 在 YAML 文件中查找字符串

find the string in YAML file using ArrayList

提问人:user2315104 提问时间:11/18/2023 最后编辑:user2315104 更新时间:11/18/2023 访问量:38

问:

我们有 YAML 文件,我们需要在其中找出特定的主机条目是否可用。

以下是代码

public class ListTest {

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

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

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

        Values1 data = yaml.load(inputStream);

        data.getRoute().getHosts().forEach(x -> System.out.println(x.getHost()));

        for (Host element : data.getRoute().getHosts()) {
            if (element.contains("goa.dev.abc.com")) {
                System.out.println(element);
                System.out.println("test");
            }
        }

    }

}

值1.java

public class Values1 {
    
    private Route route;
    private Ingress ingress;
    
    public Ingress getIngress() {
        return ingress;
    }
    public void setIngress(Ingress ingress) {
        this.ingress = ingress;
    }
    public Route getRoute() {
        return route;
    }
    public void setRoute(Route route) {
        this.route = route;
    }

}

主机.java

公共类 Host {

  private String host;
    public String getHost() {
        return host;
    }
    public void setHost(String host) {
        this.host = host;
    }
    public boolean contains(Object obj) {
        // TODO Auto-generated method stub
        
          if(!(obj instanceof Host)) {
                 return false;
              }
          
          Host host = (Host)obj;
          return this.host == host.getHost();
       }
    }

值.yaml

ingress: {backendServiceName: serv-deployment, cluster_issuer: lt-eks,
  ingressClassName: nginx-lr1, tls_acme: 'true'}
route:
  hosts:
  - {host: goa.dev.abc.com}

现在,我们只想检查列表中是否存在 , 条目, “goa.dev.abc.com”

请建议缺少什么

java yaml 蛇类

评论

0赞 k314159 11/18/2023
你总是返回.Host.containsfalse
0赞 user2315104 11/18/2023
@k314159 Thanks进行了更改。请参阅更新的 Host.java 仍然是问题。请建议
0赞 k314159 11/18/2023
这回答了你的问题吗?如何在 Java 中比较字符串?

答:

1赞 Georgii Lvov 11/18/2023 #1

代码中的问题在于类的 contains 方法。您正在使用 == 进行字符串比较,该比较检查引用是否相等,而不是内容相等。您应该使用 equals 方法进行字符串比较。Host

下面是更正后的 contains 方法:

public boolean contains(Object obj) {
    if (!(obj instanceof Host)) {
        return false;
    }

    Host otherHost = (Host) obj;
    return this.host.equals(otherHost.getHost()); // here was the problem
}

但实际上这种方法在这里很奇怪且没有必要,我们可以简单地为每个主机使用 getter:contains

for (Host element : data.getRoute().getHosts()) {
            if (element.getHost().equals("goa.dev.abc.com")) {
                System.out.println(element);
                System.out.println("test");
            }
        }
1赞 k314159 11/18/2023 #2

您的方法仅在传递 Host 时返回 true,但您实际上是在向其传递 String。你需要这样的东西:Host.contains

public boolean contains(String host)
    return this.host.equals(host);
}