提问人:user2315104 提问时间:11/18/2023 最后编辑:user2315104 更新时间:11/18/2023 访问量:38
使用 ArrayList 在 YAML 文件中查找字符串
find the string in YAML file using ArrayList
问:
我们有 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”
请建议缺少什么
答:
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);
}
评论
Host.contains
false