gpt4 book ai didi

java - 在特定情况下使用 Java Stream 映射和过滤响应代码

转载 作者:行者123 更新时间:2023-11-30 07:30:34 24 4
gpt4 key购买 nike

我的问题是关于 JAVA8 的 lambda 和过滤器的使用。它是通过Java的Selenium完成的,用于测试不同的响应代码。

如何以最大可能的方式使用 Lambda 通过 Streams 转换以下函数?

我想要重构的代码如下为 Java 8 的 Streams 、 lambda:

        for (int i = 0; i < links.size(); i++) {
if (!(links.get(i).getAttribute("href") == null) && !(links.get(i).getAttribute("href").equals(""))) {
// Find HTTP Status-Code
try {
statusCode = getResponseCode(links.get(i).getAttribute("href").trim());
} catch (IOException e) {
e.printStackTrace();
}
// Check broken link
if (statusCode== 404) {
System.out.println("Broken of Link# "+i+" "+links.get(i).getAttribute("href"));
}
else if (statusCode== 400) {
System.out.println("Bad Request# "+i+" "+links.get(i).getAttribute("href"));
}
else if (statusCode== 401) {
System.out.println("Unauthorized# "+i+" "+links.get(i).getAttribute("href"));
}
else if (statusCode== 403) {
System.out.println("Forbidden# "+i+" "+links.get(i).getAttribute("href"));
}
else if (statusCode== 500) {
System.out.println("Internal server error# "+i+" "+links.get(i).getAttribute("href"));
}
}

}

我现在拥有的是:

List<AbstractMap.SimpleImmutableEntry<String,Integer>> variablename =
links.stream().map(WebElement::getAttribute("href"));

我试图做一些事情,过滤掉所有不是 500,403,401,400,404 的东西,只保留映射或一对像(linkString,responseCode)的东西,但我在具体如何做时遇到了一些麻烦是否可以正确使用 Lambda?

编辑1:我并不是想通过流来放置所有内容,只是为了在这个示例中尽可能多地利用它

最佳答案

如果你一点一点地看的话,这相当简单,所以:

// create a set of codes you want to include
Set<Integer> acceptableCodes = new HashSet<>(Arrays.asList(404, 400, 401, 403, 500));

// for (int i = 0; i < links.size(); i++) {
links.stream()

// convert to the href value as that's all we need later on
.map(link -> link.getAttribute("href"))

// filter out anything without a href
// if (!(links.get(i).getAttribute("href") == null) && !(links.get(i).getAttribute("href").equals(""))) {
.filter(href -> href != null)
.filter(href -> !href.equals(""))

// filter out non-matching status codes
.filter(href -> acceptableCodes.contains(getResponseCode(href))
.map(link -> new LinkWithCode(href , getResponseCode(href))
.collect(toList());

将其放在一起,不带注释,以便您可以更轻松地阅读:

Set<Integer> acceptableCodes = new HashSet<>(Arrays.asList(404, 400, 401, 403, 500)); 
links.stream()
.map(link -> link.getAttribute("href"))
.filter(href -> href != null)
.filter(href -> !href.equals(""))
.filter(href -> acceptableCodes.contains(getResponseCode(href))
.map(link -> new LinkWithCode(href , getResponseCode(href))
.collect(toList());

LinkWithCode 是您需要创建的一个类来保存链接和状态代码。这假设 getResponseCode 不是重量级操作,因为它发生了两次。

警告:我还没有对此进行测试或将其放入 IDE 中,因此您可能需要做一些整理工作。

关于java - 在特定情况下使用 Java Stream 映射和过滤响应代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36203801/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com