繁体   English   中英

Java 8流api控件输出

[英]Java 8 stream api control output

我有以下代码。

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"))也给我这个名字时,我得到以下错误“ 无法解析方法'attr(java.lang.String)' ”。 我在代码中做错了什么? 有办法解决吗?

如果添加.map(input -> input.attr("value")).map(input -> input.attr("value")) Stream转换为Stream<String> (假设attr返回一个String ),而String没有attr方法,所以第二个map调用没有通过编译(因此编译错误 - Cannot resolve method 'attr(java.lang.String)' )。

您可以使用单个map操作来获取这两个属性。 例如 :

    System.out.println(inputs.stream()
        .filter(input -> input.attr("name").contains("__VIEWSTATE"))
        .map(input -> input.attr("name") + " " + input.attr("value"))
        .findFirst());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM