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

如何将Retrofit返回的多个strIngredient值存入ArrayList

从Cocktail POJO提取配料字段到ArrayList的解决方案

针对你已经定义好的Cocktail类,我给你两种实用的方法来把strIngredient1到strIngredient15的有效值提取到ArrayList<String>里:

方法一:手动逐个检查添加(直观易维护)

这种方法适合字段数量不多的场景,代码直白,不容易出错:

public List<String> getIngredientsList(Cocktail cocktail) {
    List<String> ingredients = new ArrayList<>();
    
    // 逐个检查每个配料字段,非空非空白字符串才加入列表
    addIfValid(ingredients, cocktail.getStrIngredient1());
    addIfValid(ingredients, cocktail.getStrIngredient2());
    addIfValid(ingredients, cocktail.getStrIngredient3());
    addIfValid(ingredients, cocktail.getStrIngredient4());
    addIfValid(ingredients, cocktail.getStrIngredient5());
    addIfValid(ingredients, cocktail.getStrIngredient6());
    addIfValid(ingredients, cocktail.getStrIngredient7());
    addIfValid(ingredients, cocktail.getStrIngredient8());
    addIfValid(ingredients, cocktail.getStrIngredient9());
    addIfValid(ingredients, cocktail.getStrIngredient10());
    addIfValid(ingredients, cocktail.getStrIngredient11());
    addIfValid(ingredients, cocktail.getStrIngredient12());
    addIfValid(ingredients, cocktail.getStrIngredient13());
    addIfValid(ingredients, cocktail.getStrIngredient14());
    addIfValid(ingredients, cocktail.getStrIngredient15());
    
    return ingredients;
}

// 辅助方法:判断字符串是否有效(非null且非空白),有效则加入列表
private void addIfValid(List<String> list, String value) {
    if (value != null && !value.trim().isEmpty()) {
        list.add(value.trim());
    }
}

方法二:用反射简化代码(适合字段数量多的情况)

如果后续可能增加更多配料字段,反射可以避免重复的getter调用,自动遍历规律命名的字段:

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

public List<String> getIngredientsListWithReflection(Cocktail cocktail) {
    List<String> ingredients = new ArrayList<>();
    Class<?> cocktailClass = cocktail.getClass();
    
    // 遍历1到15的配料字段
    for (int i = 1; i <= 15; i++) {
        try {
            // 拼接getter方法名,比如getStrIngredient1
            String methodName = "getStrIngredient" + i;
            Method getter = cocktailClass.getMethod(methodName);
            String ingredient = (String) getter.invoke(cocktail);
            
            // 同样只添加有效值
            if (ingredient != null && !ingredient.trim().isEmpty()) {
                ingredients.add(ingredient.trim());
            }
        } catch (Exception e) {
            // 捕获反射异常,比如字段不存在时跳过
            e.printStackTrace();
        }
    }
    
    return ingredients;
}

使用提示

  • 如果你不需要过滤空值,可以去掉addIfValid或者反射里的判断逻辑,直接添加所有字段值(包括null)。
  • 反射方法虽然简洁,但性能略低于手动调用,不过在这种场景下差异可以忽略不计。

内容的提问来源于stack exchange,提问作者JakeB

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:03:47