Java 8流api控件输出

时间:2016-05-13 08:25:41

标签: java java-8 html-parsing jsoup java-stream

我有以下代码。

List<String> parseAttribValueByTag(String tag, String attrib, List<String> attribName) throws IOException {

    List<String> keys = new ArrayList<>();

    Document doc = Jsoup.connect(url).get();
    Elements inputs = doc.select(tag + "[" + attrib + "]");
    for (String item : attribName) {
        System.out.println(inputs.stream()
            .filter(input -> input.attr("name").contains("__VIEWSTATE"))
            .findFirst());
    }
return keys;
}

它给了我以下输出

Optional[<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="5ue/NxnSLQ2akzQo5R8wBEZ,,."

我想控制输出,所以它只给我__VIEWSTATE "5ue/NxnSLQ2akzQo5R8wBEZ,,."

我尝试过使用.map(input -> input.attr("value")),它给了我Optional[5ue/NxnSLQ2akzQo5R8wBEZ,,.

但是当我添加一个额外的.map(input -> input.attr("name"))来给我命名时,我得到以下错误&#34; 无法解析方法&#39; attr(java.lang.String)&#39 ; &#34;。我在代码中做错了什么?有办法吗?

1 个答案:

答案 0 :(得分:2)

如果您添加.map(input -> input.attr("value")),则会将Stream转换为Stream<String>(假设attr返回String),并{{1} }没有String方法,因此第二个attr调用不会通过编译(因此编译错误 - map)。

您可以使用单个Cannot resolve method 'attr(java.lang.String)'操作来获取这两个属性。例如:

map