You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android Studio(Java)中处理药品类结构化数据?

在Android Studio中用Java处理药品分组数据的方案

1. 定义数据模型类

先创建对应药品字段的实体类,用来封装单条药品数据:

public class Drug {
    private String genericName;
    private String brandName;
    private String companyName;
    private String regNumber;

    public Drug(String genericName, String brandName, String companyName, String regNumber) {
        this.genericName = genericName;
        this.brandName = brandName;
        this.companyName = companyName;
        this.regNumber = regNumber;
    }

    // Getter & Setter 方法
    public String getGenericName() { return genericName; }
    public void setGenericName(String genericName) { this.genericName = genericName; }
    public String getBrandName() { return brandName; }
    public void setBrandName(String brandName) { this.brandName = brandName; }
    public String getCompanyName() { return companyName; }
    public void setCompanyName(String companyName) { this.companyName = companyName; }
    public String getRegNumber() { return regNumber; }
    public void setRegNumber(String regNumber) { this.regNumber = regNumber; }
}

2. 按GenericName分组数据

用HashMap<String, List<Drug>>作为分组容器,Key存通用名(GenericName),Value存对应通用名下的所有药品列表:

// 假设你已通过数据源获取到原始药品列表
List<Drug> rawDrugList = getRawDrugData();

// 初始化分组容器
Map<String, List<Drug>> groupedDrugs = new HashMap<>();

// 遍历原始数据完成分组
for (Drug drug : rawDrugList) {
    String genericName = drug.getGenericName().trim();
    // 若当前通用名无对应列表则创建新列表,再添加药品
    groupedDrugs.computeIfAbsent(genericName, k -> new ArrayList<>()).add(drug);
}

3. 常见数据加载方式

从本地JSON文件加载

将药品数据存放在assets目录下的drugs.json文件中,读取并解析:

private List<Drug> getRawDrugDataFromAssets() throws IOException {
    AssetManager assetManager = getAssets();
    InputStream inputStream = assetManager.open("drugs.json");
    byte[] buffer = new byte[inputStream.available()];
    inputStream.read(buffer);
    inputStream.close();
    String jsonContent = new String(buffer, StandardCharsets.UTF_8);

    // 使用Gson解析JSON(需在build.gradle添加依赖:implementation 'com.google.code.gson:gson:2.10.1')
    Gson gson = new Gson();
    return Arrays.asList(gson.fromJson(jsonContent, Drug[].class));
}

从SQLite数据库加载

若数据存在本地数据库,可使用Room框架简化操作:
首先定义DAO接口:

@Dao
public interface DrugDao {
    @Query("SELECT * FROM drugs")
    List<Drug> getAllDrugs();

    // 支持直接按通用名查询,减少内存分组操作
    @Query("SELECT * FROM drugs WHERE genericName = :genericName")
    List<Drug> getDrugsByGenericName(String genericName);
}

通过DAO获取全量数据后,再执行分组逻辑即可。

4. 常用数据操作

查询指定通用名下的药品

String targetGeneric = "Paracetamol";
List<Drug> targetDrugs = groupedDrugs.getOrDefault(targetGeneric, new ArrayList<>());

分组内按公司名称排序

for (Map.Entry<String, List<Drug>> entry : groupedDrugs.entrySet()) {
    List<Drug> drugs = entry.getValue();
    // 忽略大小写排序
    Collections.sort(drugs, (d1, d2) -> d1.getCompanyName().compareToIgnoreCase(d2.getCompanyName()));
}

过滤指定药企的药品

String targetCompany = "ABC Pharma";
Map<String, List<Drug>> filteredGroups = new HashMap<>();
for (Map.Entry<String, List<Drug>> entry : groupedDrugs.entrySet()) {
    List<Drug> filteredDrugs = entry.getValue().stream()
            .filter(drug -> drug.getCompanyName().equals(targetCompany))
            .collect(Collectors.toList());
    if (!filteredDrugs.isEmpty()) {
        filteredGroups.put(entry.getKey(), filteredDrugs);
    }
}

5. UI展示思路(可选)

若需在界面展示分组数据,可选择:

  • 使用ExpandableListView直接实现分组展开/收起效果
  • 自定义RecyclerView Adapter,区分分组标题项和药品子项,加载不同布局实现分组展示

内容的提问来源于stack exchange,提问作者Md.Alireza Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 12:17:25