String[] split = key.split("@"); String tempKey = split[0] + "@" + split[1]; 优化这段代码
时间: 2024-01-22 14:02:23 浏览: 118
可以优化这段代码,使用正则表达式和字符串操作来实现去掉字符串第二次出现@字符后面的内容。以下是一种实现方式:
```java
String key = "abc@def@ghi@jkl";
String tempKey = key.replaceAll("@.*?(?=@)", "");
System.out.println(tempKey);
```
输出结果为:`abc@def`。这里使用了正则表达式 `@.*?(?=@)`,表示匹配第一个@字符后面的所有字符,直到下一个@字符出现为止。然后使用 `replaceAll()` 方法将匹配到的字符串替换为空字符串,从而去掉第二次出现@字符后面的内容。
相关问题
List<RelayLinkReport> linkReportList = new ArrayList<>(); for (Map.Entry<String, List<PortReportResultVo>> entry : relayLinkAndPortMap.entrySet()) { // key为链路组 String key = entry.getKey(); String[] split = key.split("@"); String tempKey = split[0] + "@" + split[1]; RelayLinkReport linkReport = new RelayLinkReport(); RelayLinkReport relayLinkReport = linkGroupDevPortMap.get(tempKey); BeanUtil.copyProperties(relayLinkReport,linkReport); // value是这个链路组下的端口详情数据,已经查过es并且组装完成,链路组查询接口这个对这个链路下的端口做汇总,链路组导出不需要汇总,前面已经封装好了,这里可以自由选择是否汇总 List<PortReportResultVo> values = entry.getValue(); for (PortReportResultVo trDevportVO: values){ this.setRelayLinkTotalValue(linkReport,trDevportVO); } linkReportList.add(linkReport); } 优化这段代码
这段代码可以进行如下优化:
1. 将链路组转换为Map,并将操作放到一个方法中,提高代码可读性和复用性。
2. 不需要创建临时变量 tempKey,可以直接使用 entry.getKey() 进行操作。
3. 在遍历链路组下的端口详情数据时,可以使用 foreach 循环进行操作,提高代码可读性。
4. 可以使用 Lambda 表达式代替 foreach 循环中的操作,提高代码简洁度。
修改后的代码如下所示:
```
List<RelayLinkReport> linkReportList = new ArrayList<>();
Map<String, RelayLinkReport> linkGroupDevPortMap = ... // 链路组数据
Map<String, List<PortReportResultVo>> relayLinkAndPortMap = ... // 链路组下的端口详情数据
relayLinkAndPortMap.forEach((key, values) -> {
RelayLinkReport linkReport = new RelayLinkReport();
RelayLinkReport relayLinkReport = linkGroupDevPortMap.get(key);
BeanUtil.copyProperties(relayLinkReport, linkReport);
values.forEach(trDevportVO -> {
this.setRelayLinkTotalValue(linkReport, trDevportVO);
});
linkReportList.add(linkReport);
});
```
for(Map.Entry<String, List<TrDevportVO>> entry : relayLinkAndPortListMap.entrySet()) { String key = entry.getKey(); List<TrDevportVO> values = entry.getValue(); List<DevPortReportEsDTO> esDTOS = new ArrayList<>(); for (TrDevportVO trDevportVO: values){ String tempKey = trDevportVO.getDevId() + trDevportVO.getPortName(); DevPortReportEsDTO reportEsDTO = reportEsDTOMap.get(tempKey); esDTOS.add(reportEsDTO); } relayLinkAndPortListMap1.put(key,esDTOS); System.out.println("Key: " + key); System.out.println("Value: " + values); } 优化这段代码
可以尝试使用 Java 8 的 stream API 来进行优化,如下所示:
```
Map<String, List<DevPortReportEsDTO>> relayLinkAndPortListMap1 = relayLinkAndPortListMap.entrySet()
.stream()
.collect(Collectors.toMap(
Map.Entry::getKey,
entry -> entry.getValue()
.stream()
.map(trDevportVO -> reportEsDTOMap.get(trDevportVO.getDevId() + trDevportVO.getPortName()))
.collect(Collectors.toList())
));
relayLinkAndPortListMap1.forEach((key, value) -> {
System.out.println("Key: " + key);
System.out.println("Value: " + value);
});
```
这样可以通过流式处理来避免显式的循环,使代码更加简洁易读。
阅读全文