关于过滤 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);
我正在使用 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);