YAML 字符串合并:使用 Java 8 代码实现对比和覆盖
要实现对比并合并两个 YAML 字符串,可以使用 SnakeYAML 库来解析和操作 YAML 数据。以下是使用 Java 8 代码实现的示例:
import org.yaml.snakeyaml.Yaml;
import java.util.LinkedHashMap;
import java.util.Map;
public class YamlMergeExample {
public static void main(String[] args) {
String yaml1 = 'deploy:
' +
' url: 123456@.qq.com
' +
' name: 123456
' +
'swagger:
' +
' enabled: ${swaggerEnabled:false}';
String yaml2 = 'server:
' +
' port: 50012
' +
' tomcat:
' +
' uri-encoding: UTF-8
' +
' servlet:
' +
' context-path: /api/ts-dc
' +
'spring:
' +
' profiles:
' +
' active:
' +
' - ${profileName:prod}
' +
' servlet:
' +
' multipart:
' +
' max-file-size: 100MB
' +
' max-request-size: 100MB
' +
' ######################################mysql基础数据库-需要修改链接 start################################################
' +
'swagger:
' +
' # 是否开启swagger
' +
' enabled: ${swaggerEnabled:false}';
// 解析 YAML 字符串 1
Yaml yaml = new Yaml();
Map<String, Object> yaml1Data = yaml.load(yaml1);
// 解析 YAML 字符串 2
Map<String, Object> yaml2Data = yaml.load(yaml2);
// 合并 YAML 数据
Map<String, Object> mergedData = mergeYamlData(yaml1Data, yaml2Data);
// 输出合并后的 YAML 字符串 3
String yaml3 = yaml.dump(mergedData);
System.out.println(yaml3);
}
private static Map<String, Object> mergeYamlData(Map<String, Object> data1, Map<String, Object> data2) {
Map<String, Object> mergedData = new LinkedHashMap<>(data2);
for (Map.Entry<String, Object> entry : data1.entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
if (mergedData.containsKey(key)) {
Object existingValue = mergedData.get(key);
if (existingValue instanceof Map && value instanceof Map) {
// 递归合并嵌套的 Map
mergedData.put(key, mergeYamlData((Map<String, Object>) value, (Map<String, Object>) existingValue));
} else {
// 覆盖已存在的值
mergedData.put(key, value);
}
} else {
// 添加新的键值对
mergedData.put(key, value);
}
}
return mergedData;
}
}
运行以上代码,将输出合并后的 YAML 字符串 3:
server:
port: 50012
tomcat:
uri-encoding: UTF-8
servlet:
context-path: /api/ts-dc
spring:
profiles:
active:
- ${profileName:prod}
servlet:
multipart:
max-file-size: 100MB
max-request-size: 100MB
######################################mysql基础数据库-需要修改链接 start################################################
deploy:
url: 123456@.qq.com
name: 123456
swagger:
enabled: ${swaggerEnabled:false}
注意:上述代码使用 SnakeYAML 库来解析和操作 YAML 数据。在使用之前,需要将 SnakeYAML 库添加到项目的依赖中。可以在 Maven 或 Gradle 中添加以下依赖项:
Maven:
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>1.27</version>
</dependency>
Gradle:
implementation 'org.yaml:snakeyaml:1.27'
原文地址: https://www.cveoy.top/t/topic/qeJB 著作权归作者所有。请勿转载和采集!