这是我正在尝试做的事情:
我有一些List<String>
,如果List包含一个特定的字符串,我想打印一个语句,否则抛出一个Exception但是当我尝试下面的代码时
List<String> fruit = new ArrayList<>();
fruit.add("apple");
fruit.add("orange");
fruit.add("banana");
for(int i = 0; i < fruit.size(); i++){
if(fruit.get(i).contains("banana"){
System.out.println("Found");
} else {
throw new SkipException("could not be found");
}
}
它遍历List并在i = 0
显然找到“apple”并立即转到else
块并抛出异常。我也试过以下,但这也没用。
for(int i = 0; i < fruit.size(); i++){
if(Arrays.asList(fruit).contains("banana"){
System.out.println("found");
}else{
throw new SkipException("not found");
}
}
有没有一种简单的方法可以做我想在这里做的事情?
答案 0 :(得分:6)
有几种方法。
您选择哪一个取决于您,在详细程度之间进行权衡,仅限于简单的等于检查(如果您想进行更复杂的匹配,则无法轻松执行选项1),并使用您可能尚未支持或不熟悉的新API。
选项1 : Collection.contains()方法:
List<String> fruit = new ArrayList<>();
fruit.add("apple");
fruit.add("orange");
fruit.add("banana");
if (fruit.contains("banana") {
System.out.println("Found");
} else {
throw new SkipException("could not be found");
}
选项2 :使用具有外部状态的for
循环:
List<String> fruit = new ArrayList<>();
fruit.add("apple");
fruit.add("orange");
fruit.add("banana");
boolean found = false;
for (String s : fruit) {
if (s.equals("banana")) {
found = true;
break; // Break out of the loop to skip the remaining items
}
}
if (found) {
System.out.println("Found");
} else {
throw new SkipException("could not be found");
}
选项3 :如果您正在使用Java 8,那么整洁的Stream.anyMatch()方法:
List<String> fruit = new ArrayList<>();
fruit.add("apple");
fruit.add("orange");
fruit.add("banana");
if (fruit.stream().anyMatch(s -> s.equals("banana"))) {
System.out.println("Found");
} else {
throw new SkipException("could not be found");
}
选项3是我个人的最爱,因为它几乎和选项1一样紧凑,但如果你想根据{{1}以外的其他东西进行比较,可以提供更复杂的Predicate方法。
答案 1 :(得分:1)
您不必遍历数组列表。一旦调用list.contains("someString")
,它将检查整个数组列表中的字符串。因此,以下就足够了。
if(fruit.contains("banana"){
System.out.println("Found");
} else {
throw new SkipException("could not be found");
}
答案 2 :(得分:0)
尝试使用此功能 如果在任何索引处,该值等于&#34; banana&#34;它将打印发现其他它将抛出异常
List<String> fruit = new ArrayList<>();
fruit.add("apple");
fruit.add("orange");
fruit.add("banana");
for(int i = 0; i < fruit.size(); i++){
if(fruit.get(i).equals("banana"){
System.out.println("Found");
}
else {
throw new SkipException("could not be found");
}
}
解决方案2: 当你使用arraylists时,你不需要手动遍历每个索引,而是arraylist给你一个函数&#34; contains()&#34;这将自动检查所需的值是否存在于任何索引,所以只需执行此操作:
if(fruit.contains("banana"){
System.out.println("Found");
} else {
throw new SkipException("could not be found");
}
答案 3 :(得分:-1)
尝试使用布尔值来检测您是否在水果列表中找到了水果。像这样:
boolean inlist = false;
for(int i = 0; i < fruit.size(); i++){
if(fruit.get(i).equals("banana"){
inlist = true
break;
}
}
if (inlist) {
System.out.println("found");
} else {
throw new SkipException("not found");
}