首页 > Java > java教程 > 正文

从嵌套在 LinkedHashMap 中的 ArrayList 中提取值

DDD
发布: 2025-10-29 12:46:26
原创
633人浏览过

从嵌套在 linkedhashmap 中的 arraylist 中提取值

本文将指导你如何使用 SnakeYAML 库解析 YAML 文件,并从嵌套在 `LinkedHashMap` 中的 `ArrayList` 中提取特定值。我们将通过定义自定义类来映射 YAML 结构,从而简化数据访问,并提供代码示例和最佳实践。

使用 SnakeYAML 解析 YAML 文件并提取嵌套值

在处理 YAML 文件时,经常会遇到需要从嵌套的数据结构中提取特定值的情况。 例如,YAML 文件可能包含一个 LinkedHashMap,其中包含一个 ArrayList,而该 ArrayList 又包含多个 HashMap。 本教程将演示如何使用 SnakeYAML 库有效地解析这种 YAML 文件,并提取所需的数据。

1. 定义 Java 类映射 YAML 结构

为了更方便地访问 YAML 数据,建议定义与 YAML 结构相对应的 Java 类。 这样可以避免手动解析 LinkedHashMap 和 ArrayList,并提供类型安全的访问。

例如,如果你的 YAML 文件如下所示:

description: this-apps-config
options:
  - customer: joe
    id: 1
    date: 2022-01-01
    print: False
  - customer: jane
    id: 2
    date: 2022-01-02
    print: True
登录后复制

你可以定义以下 Java 类:

import java.util.List;
import java.util.Date;

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;
    }
}
登录后复制

确保每个字段都有对应的 getter 和 setter 方法。

2. 使用 SnakeYAML 加载 YAML 文件

现在可以使用 SnakeYAML 加载 YAML 文件并将其映射到定义的 Java 类。

import org.yaml.snakeyaml.Yaml;
import java.io.InputStream;

public class YamlParser {

    public static void main(String[] args) {
        Yaml yaml = new Yaml();
        InputStream inputStream = YamlParser.class
                .getClassLoader()
                .getResourceAsStream("file.yml"); // 替换为你的 YAML 文件名
        MyYaml myYaml = yaml.loadAs(inputStream, MyYaml.class);

        // 现在可以访问数据
        System.out.println("Description: " + myYaml.getDescription());
        List<Customer> options = myYaml.getOptions();
        for (Customer customer : options) {
            System.out.println("Customer: " + customer.getCustomer() + ", Print: " + customer.isPrint());
        }
    }
}
登录后复制

请确保将 "file.yml" 替换为你的 YAML 文件的实际名称。 loadAs 方法会将 YAML 数据加载到 MyYaml 对象中。

百度文心百中
百度文心百中

百度大模型语义搜索体验中心

百度文心百中22
查看详情 百度文心百中

3. 访问嵌套值

加载 YAML 文件后,你可以使用 getter 方法访问嵌套的值。 在上面的示例中,我们首先获取 options 列表,然后遍历该列表以访问每个 Customer 对象的 print 值。

注意事项

  • 依赖: 确保你的项目中包含了 SnakeYAML 依赖。 如果使用 Maven,可以在 pom.xml 文件中添加以下依赖项:

    <dependency>
        <groupId>org.yaml</groupId>
        <artifactId>snakeyaml</artifactId>
        <version>2.0</version> <!-- 请使用最新版本 -->
    </dependency>
    登录后复制
  • 异常处理: 在实际应用中,应该添加适当的异常处理机制,以处理文件不存在、YAML 格式错误等情况。

  • 类型转换: SnakeYAML 会尝试将 YAML 值转换为 Java 类型。 如果需要自定义类型转换,可以使用 TypeDescription 类进行配置。

总结

通过定义与 YAML 结构相对应的 Java 类,并使用 SnakeYAML 加载 YAML 文件,你可以轻松地访问嵌套在 LinkedHashMap 中的 ArrayList 中的值。 这种方法提高了代码的可读性和可维护性,并避免了手动解析复杂数据结构的麻烦。 记住处理潜在的异常并根据需要自定义类型转换。

以上就是从嵌套在 LinkedHashMap 中的 ArrayList 中提取值的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号