我正在将字符串列表与关键字列表进行匹配。目标是仅获取一个字符串(如果该字符串中包含任何关键字)一次。
实际上我是用这个循环来做的:
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/