lambda优化 private static void getUrl(String baseUrl) { Map<String,Boolean> oldMap=new LinkedHashMap<>(); String oldLinkHost=""; Pattern p=Pattern.compile("(https?://)?[/\s]*"); Matcher m=p.matcher(baseUrl); if (m.find()){ oldLinkHost=m.group(); } oldMap.put(baseUrl,false); crawlLinks(oldLinkHost,oldMap); for (Map.Entry<String,Boolean> mapping :oldMap.entrySet()){ System.out.println("链接:" + mapping.getKey()); } }
时间: 2024-01-08 07:04:19 浏览: 328
在这段代码中,有一些可以进行lambda优化的地方,例如:
1. 对于Map的遍历,可以使用forEach方法来替代for循环,代码如下:
```
oldMap.forEach((key, value) -> {
System.out.println("链接:" + key);
});
```
2. 对于正则表达式的编译,可以使用lambda表达式来避免创建多个Pattern对象,代码如下:
```
Pattern.compile("(https?://)?[/\\s]*").matcher(baseUrl)
```
这里使用了Matcher的流式API来调用compile方法,避免了创建Pattern对象。
3. 对于Map的初始化,可以使用Java 9中新增的ofEntries方法来替代手动添加键值对,代码如下:
```
Map<String, Boolean> oldMap = Map.ofEntries(
Map.entry(baseUrl, false)
);
```
这里使用了Map.entry方法来创建键值对,然后使用ofEntries方法将它们组合到一起。
综上所述,可以对代码进行如下优化:
```
private static void getUrl(String baseUrl) {
String oldLinkHost = Pattern.compile("(https?://)?[/\\s]*")
.matcher(baseUrl)
.find()
? Pattern.compile("(https?://)?[/\\s]*")
.matcher(baseUrl)
.group()
: "";
Map<String, Boolean> oldMap = Map.ofEntries(
Map.entry(baseUrl, false)
);
crawlLinks(oldLinkHost, oldMap);
oldMap.forEach((key, value) -> {
System.out.println("链接:" + key);
});
}
```
阅读全文