java - 需要一种方法来获取与 List.stream().anyMatch() 匹配的字符串中的模式

标签 java java-stream

我正在将字符串列表与关键字列表进行匹配。目标是仅获取一个字符串(如果该字符串中包含任何关键字)一次。

实际上我是用这个循环来做的:

for (int i = 0; i < keywords.size(); i++) {
   if (text.toLowerCase().contains(keywords.get(i))) {
      System.out.println("keyword >>> " + keywords.get(i)
         + " text >>> " + text);
      break;
   }
}

我想知道如果我像这样使用 java Stream API 是否有办法获取关键字:

if (keywords.stream().anyMatch(text.toLowerCase()::contains)) {
   System.out.println("keyword >>> " + "how to get the keyword here"
         + " text >>> " + text);
}

最佳答案

anyMatch返回一个 boolean 值

使用.filter() & findFirst()您可以检索一个值。请注意,如果您使用 findFirst()你会得到一个 Optional<String>并且可以使用 ifPresent()像这样:

keywords.stream()
    .filter(keyword -> text.toLowerCase().contains(keyword))
    .findFirst()
    .ifPresent(keyWord -> System.out.println("[2] keyword >>> " + keyWord + " text >>> " + text));

或者使用 Optional.isPresent() & Optional.get() :

Optional<String> firstKey = keywords.stream()
    .filter(keyword -> text.toLowerCase().contains(keyword))
    .findFirst();

if (firstKey.isPresent()) {
    System.out.println("[2] keyword >>> " + firstKey.get() + " | text >>> " + text);
}

关于java - 需要一种方法来获取与 List.stream().anyMatch() 匹配的字符串中的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69723475/

相关文章:

java - Stream<java.lang.Byte> 无法使用常见的终端操作吗?

java - 不共享任何外键关系的 JPA 实体之间的 @OneToOne 关系

java - JMS:如何将DLQ中的消息重新传递给主题订阅者?

java - 使用 freemarker 模板错误发生配置失败

java - 如何从我的资源构建路径加载 ResourceBundle?

java - 使用流将字符串列表转换为具有自定义键的映射列表

Java 流修剪列表

java - 条目集上的通用迭代器

java 8并行流按给定值组织列表

LambdaJ 索引的 Java 流替代方案