检查列表是否包含指定项目以外的项目的最佳方法是什么?
What’s the best way to check if a list contains an item other than specified item?
假设我有一个列表,我想搜索一个值为“apple”的项目。
List<String> items = new Arraylist<>():
我想 return false 如果 items 包含至少一个元素而不是提到的项目(“apple” ), true 如果列表中的所有项目都是“苹果”。
我使用 python 但是,我认为是这样的:
list_entrance = 输入()
new_list = []
在list_entrance中循环:
如果循环!=“苹果”:
打印(“假”)
别的:
继续
如果您愿意,您当然可以在“new_list”中“追加”一个项目。
我不知道你的任务的完整情况。
只是说你的 ArrayList 应该这样定义:
List items = new ArrayList<>();
你在问题中漏掉了一些大写字母。
对于解决方案,您可以循环遍历列表并检查:
for (int x = 0; x<items.size(); x++){
if (! items.get(x).equals("apple")){
return false;
}
}
return true;
这里是 one-liner:
return items.stream().anyMatch(s -> !s.equals("apple"));
或可爱但不太明显:
return items.stream().allMatch("apple"::equals);
使用 Stream IPA 你可以通过使用终端操作 allMath()
来实现,它需要一个 predicate ( 由布尔条件 表示的函数)并检查流中的所有元素是否与给定的 predicate.
匹配
代码将如下所示:
public static void main(String[] args) {
List<String> items1 = List.of("apple", "apple", "apple"); // expected true
List<String> items2 = List.of("apple", "orange"); // expected false
System.out.println(items1.stream().allMatch(item -> item.equals("apple")));
System.out.println(items2.stream().allMatch(item -> item.equals("apple")));
}
输出
true
false
请改用 Set
,以免出现重复项。
Collectors
也可以returnSet
:
Set<String> distinct = list.stream().collect(Collectors.toSet());
假设我有一个列表,我想搜索一个值为“apple”的项目。
List<String> items = new Arraylist<>():
我想 return false 如果 items 包含至少一个元素而不是提到的项目(“apple” ), true 如果列表中的所有项目都是“苹果”。
我使用 python 但是,我认为是这样的:
list_entrance = 输入()
new_list = []
在list_entrance中循环: 如果循环!=“苹果”: 打印(“假”) 别的: 继续
如果您愿意,您当然可以在“new_list”中“追加”一个项目。 我不知道你的任务的完整情况。
只是说你的 ArrayList 应该这样定义:
List items = new ArrayList<>();
你在问题中漏掉了一些大写字母。
对于解决方案,您可以循环遍历列表并检查:
for (int x = 0; x<items.size(); x++){
if (! items.get(x).equals("apple")){
return false;
}
}
return true;
这里是 one-liner:
return items.stream().anyMatch(s -> !s.equals("apple"));
或可爱但不太明显:
return items.stream().allMatch("apple"::equals);
使用 Stream IPA 你可以通过使用终端操作 allMath()
来实现,它需要一个 predicate ( 由布尔条件 表示的函数)并检查流中的所有元素是否与给定的 predicate.
代码将如下所示:
public static void main(String[] args) {
List<String> items1 = List.of("apple", "apple", "apple"); // expected true
List<String> items2 = List.of("apple", "orange"); // expected false
System.out.println(items1.stream().allMatch(item -> item.equals("apple")));
System.out.println(items2.stream().allMatch(item -> item.equals("apple")));
}
输出
true
false
请改用 Set
,以免出现重复项。
Collectors
也可以returnSet
:
Set<String> distinct = list.stream().collect(Collectors.toSet());