我有一个带有一些标签的String []。
在我的示例中:image.getRepoTags[0] = clone_envx:img1
和imageTag = img1
我的代码返回false。为什么?如何查看imageTag is in String[] image.getRepoTags()?
if(Arrays.asList(image.getRepoTags()).contains(imageTag))
return true;
else
return false;
答案 0 :(得分:2)
将数组转换为List无法帮助您满足您的需求,因为您希望在String
元素内搜索。
您可以迭代数组元素,并在一个元素包含imageTag
时停止:
return Arrays.stream(arr)
.anyMatch(s -> s.contains("imageTag"));
答案 1 :(得分:2)
list.contains()
和string.contains()
之间存在差异。这是你的问题。第一个检查是否存在整个对象的完全匹配,而第二个检查字符串的实际内容。
list.contains()
的示例:
new String[]{"test", "test2", "img1"}
包含实际的字符串对象img1
(true)。如果我们将数组更改为
new String[]{"test", "test2", "clone_envx:img1"}
然后它不包含完美匹配(false)。
Java 7解决问题的方法:
for (String str : image.getRepoTags()) {
if(str.contains(imageTag)) {
return true;
}
}
return false;
第二次返回应该只在迭代整个列表后发生。这就是循环之后的原因。
答案 2 :(得分:0)
您应该循环或流式传输标签列表,并检查它们中是否包含您的imageTag变量。
例如在Java 8中:
boolean anyMatch = Arrays.asList(image.getRepoTags()).stream()
.anyMatch(tag -> tag.contains("img1"));