IntelliJ предупреждение о фильтрации элементов Jsoup - PullRequest
0 голосов
/ 29 февраля 2020

Я использую Jsoup для анализа HTML файлов и хочу получить все элементы script, атрибут type которых равен "dingdong".

Вот код, который я сделал чтобы попытаться выполнить sh, что:

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

Однако IntelliJ выделяет attr красным и выдает предупреждение:

enter image description here

Я действительно не понимаю, в чем проблема, из-за которой 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;

Ответы [ 2 ]

2 голосов
/ 29 февраля 2020

В методе .filter ожидается NodeFilter, а не предикат, как вы, возможно, предполагали.

Вы можете добиться того же, используя .select:

Stream<String> codeLines = document.getElementsByTag("script")
                .select("[type=dingdong]")
                .stream()
                .map(Element::data);
1 голос
/ 29 февраля 2020

Вы только что пропустили stream ()

Элементы, для которых есть метод 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);
...