【问题标题】:IntelliJ warning about filtering Jsoup Elements关于过滤 Jsoup 元素的 IntelliJ 警告
【发布时间】:2020-03-01 00:44:53
【问题描述】:

我正在使用 Jsoup 解析 HTML 文件,我想获取所有 type 属性等于“叮咚”的 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;

【问题讨论】:

  • 你能分享你的进口吗?
  • 编辑了我的问题以包括导入。

标签: java intellij-idea jsoup


【解决方案1】:

.filter 方法需要 NodeFilter,而不是您可能假设的谓词。

您也可以使用.select

Stream<String> codeLines = document.getElementsByTag("script")
                .select("[type=dingdong]")
                .stream()
                .map(Element::data);

【讨论】:

  • 感谢您的回答和更正forEachmap :)
【解决方案2】:

您只是错过了 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);

【讨论】:

    猜你喜欢
    • 2016-12-11
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多