检查列表是否包含指定项目以外的项目的最佳方法是什么?

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());