我有以下代码:
@Override
public String parsePrice(Document document) {
Elements metaElements = document.getElementsByTag("meta");
for (Element tag : metaElements) {
String content = tag.attr("content");
String item = tag.attr("itemprop");
if ("price".equals(item)) {
return content.equals("0") ? "Free" : content;
}
}
return "Information not available";
}
Run Code Online (Sandbox Code Playgroud)
它将返回类似“7,49$”的价格。我想用 java 8 功能替换此代码。我是流的新手,但尝试过:
metaElements.stream().filter(tag -> "price".equals(tag.attr("itemprop")))
.findFirst().orElse(null);
Run Code Online (Sandbox Code Playgroud)
但它返回 <meta itemprop="price" content="7,49$">
我不能像这样过滤(缺少 return 语句):
metaElements.stream().filter(tag -> {
String content = tag.attr("content");
String item = tag.attr("itemprop");
if ("price".equals(item)) {
return content.equals("0") ? "Free" : content;
}
}).findFirst().orElse(null);
Run Code Online (Sandbox Code Playgroud)
如何解决?
您在这里的尝试很接近:
metaElements.stream()
.filter(tag -> "price".equals(tag.attr("itemprop")))
.findFirst()
.orElse(null);
Run Code Online (Sandbox Code Playgroud)
你只需要在 例如之后map+orElsefindFirst
return metaElements.stream()
.filter(tag -> "price".equals(tag.attr("itemprop")))
.findFirst()
.map(tag -> tag.attr("content").equals("0") ?
"Free" : tag.attr("content"))
.orElse("Information not available");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
109 次 |
| 最近记录: |