
本文介绍了如何使用SnakeYAML库从YAML文件中读取数据,并提取嵌套在`LinkedHashMap`中的`ArrayList`中的特定值。通过定义自定义类来映射YAML结构,可以更方便地访问和操作数据,避免繁琐的类型转换和手动遍历。本文提供了详细的代码示例和步骤,帮助开发者高效地处理YAML数据。
在使用SnakeYAML库解析YAML文件时,如果YAML结构包含嵌套的集合,例如LinkedHashMap中嵌套ArrayList,而ArrayList中又包含HashMap,直接提取特定值可能会比较繁琐。更优雅和高效的方法是定义与YAML结构相对应的Java类,然后使用SnakeYAML将YAML数据直接加载到这些类的实例中。
1. 定义Java类映射YAML结构
首先,我们需要创建两个Java类:MyYaml 和 Customer。MyYaml 类对应于YAML文件的顶层结构,包含一个description字段和一个options字段,options字段是一个Customer对象的列表。Customer类则对应于options列表中每个条目的结构,包含customer、id、date和print字段。
import java.util.Date;
import java.util.List;
public class MyYaml {
private String description;
private List<Customer> options;
// Getters and setters
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public List<Customer> getOptions() {
return options;
}
public void setOptions(List<Customer> options) {
this.options = options;
}
}
import java.util.Date;
public class Customer {
private String customer;
private int id;
private Date date;
private boolean print;
// Getters and setters
public String getCustomer() {
return customer;
}
public void setCustomer(String customer) {
this.customer = customer;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public boolean isPrint() {
return print;
}
public void setPrint(boolean print) {
this.print = print;
}
}2. 使用SnakeYAML加载YAML文件
接下来,使用SnakeYAML库将YAML文件加载到MyYaml类的实例中。
import org.yaml.snakeyaml.Yaml;
import java.io.InputStream;
public class YamlLoader {
public static void main(String[] args) {
Yaml yaml = new Yaml();
InputStream inputStream = YamlLoader.class
.getClassLoader()
.getResourceAsStream("file.yml"); // 替换为你的YAML文件路径
if (inputStream != null) {
MyYaml myYaml = yaml.loadAs(inputStream, MyYaml.class);
// 现在可以方便地访问数据
if (myYaml != null && myYaml.getOptions() != null) {
for (Customer customer : myYaml.getOptions()) {
System.out.println("Customer: " + customer.getCustomer());
System.out.println("Print: " + customer.isPrint());
}
} else {
System.out.println("Failed to load YAML data or options are null.");
}
} else {
System.out.println("Could not find the YAML file.");
}
}
}3. 访问嵌套数据
加载完成后,就可以通过MyYaml对象的getOptions()方法获取Customer对象的列表,然后遍历该列表,访问每个Customer对象的print属性。
注意事项:
总结:
通过定义与YAML结构相对应的Java类,并使用SnakeYAML的loadAs方法,可以方便地将YAML数据加载到Java对象中,从而简化了对嵌套数据的访问和操作。这种方法避免了手动遍历和类型转换的麻烦,提高了代码的可读性和可维护性。
以上就是从嵌套在LinkedHashMap中的ArrayList中获取值的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号