使用isPresent方法的Java8中的列表过滤器

时间:2019-03-23 10:35:56

标签: java lambda java-8 java-stream

我有一个包含一些String值的列表。我想与另一个String进行比较的列表。仅当另一个String与列表中的任何元素都不匹配时,我才应进入循环。我尝试了以下类似方法,但没有成功。还有其他替代方法可以在Java 8中做到这一点吗?

注意:在循环中,我将更多元素添加到同一列表中。因此,为了避免ConcurrentModificationException,我使用了if条件进行验证。

List<String> mylist = new ArrayList<>();
mylist.add("test");
mylist.add("test1");

if(mylist.stream()
        .filter(str -> !(str.equalsIgnoreCase("test")))
        .findFirst()
        .isPresent()) {
    System.out.println("Value is not Present");
}

3 个答案:

答案 0 :(得分:9)

您应该使用noneMatch()

if (mylist.stream().noneMatch(str -> str.equalsIgnoreCase(testString))) {
    System.out.println("Value is not Present");
}

答案 1 :(得分:9)

您应该为此使用Stream#noneMatch。这将使您的代码更具可读性和简洁性。另外,请尽量避免在if语句中加入太多逻辑,提取可读变量中的最大值

List<String> mylist = new ArrayList<>();
mylist.add("test");
mylist.add("test1");

Predicate<String> equalsIgnoreCasePredicate = str -> str.equalsIgnoreCase("test");
boolean noneMatchString = mylist.stream().noneMatch(equalsIgnoreCasePredicate);

if (noneMatchString) {
    System.out.println("Value is not Present");
}

答案 2 :(得分:-1)

无需使用Stream API即可实现上述目的。下面是一个可能的解决方案

String searchValue = "COW";
List<String> list = Arrays.asList("CAT", "DOG");

if(!list.contains(searchValue)){
    System.out.println("Value is not Present");
}