关于过滤 Jsoup 元素的 IntelliJ 警告

IntelliJ warning about filtering Jsoup Elements

我正在使用 Jsoup 解析 HTML 文件,我想获取所有 type 属性等于 "dingdong".[=16 的 script 元素=]

这是我为实现该目的而编写的代码:

Stream<String> codeLines = document.getElementsByTag("script")
                .filter(element -> element.attr("type").contentEquals("dingdong"))
                .forEach(Element::data)
                .stream();

但是,IntelliJ 以红色突出显示 attr 并显示警告:

我真的看不出 IntelliJ 是在大惊小怪的什么问题,所以任何帮助将不胜感激!

提前致谢!

注意:我将 IntelliJ 与 JDK11.0.6 一起使用。


编辑 - 根据要求,这是我的导入:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.File;
import java.io.IOException;
import java.util.stream.Stream;

.filter method expects a NodeFilter,不是您假设的谓词。

您可以使用 .select:

实现相同的效果
Stream<String> codeLines = document.getElementsByTag("script")
                .select("[type=dingdong]")
                .stream()
                .map(Element::data);

您刚刚错过了 stream()

Elements to 的 filter() 方法可能让您感到困惑

应该是:

document.getElementsByTag("script").stream()
        .filter(element -> element.attr("type").contentEquals("dingdong"))
        .forEach(Element::data);

如果需要流而不是使用地图:

Stream<String> stream = document.getElementsByTag("script").stream()
                                .filter(element -> element.attr("type").contentEquals("dingdong"))
                                .map(Element::data);