java - 使用 isPresent 方法在 Java8 中列出过滤器

标签 java lambda java-8 java-stream

我有一个包含一些字符串值的列表。我想迭代列表与另一个字符串进行比较。只有当另一个字符串与列表中的任何元素都不匹配时,我才应该进入循环。我尝试了类似下面的方法,但没有用。在 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");
}

最佳答案

您应该为此使用 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");
}

关于java - 使用 isPresent 方法在 Java8 中列出过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55312815/

相关文章:

android - Java 8 New Date API 在 Android N 中可用吗?

java-8 - Set<LocalDate> 包含 LocalDate 最佳实践

c# - 使用 lambda 获取扩展方法的第一个参数的属性? (x => x.请)

java - 为什么 lambda 在引用最终字符串字段时需要捕获封闭实例?

java - Lambda 表达式中方法引用的方法引用

java - 自己创建一个ResultSet对象

lambda - R5RS Scheme 中是否有使用 "λ"字符作为 "lambda"的宏?

java - 使用 SwipeRefreshLayout 刷新 ListView

java - 保存具有起始时间的对象的类的好名字

java - Java中使用流比较两个List元素并返回