为了账号安全,请及时绑定邮箱和手机立即绑定

如何将 List<Object> 转换为 List<T>?

如何将 List<Object> 转换为 List<T>?

ibeautiful 2021-08-19 16:45:16
这是将改造响应作为对象获取的代码。下面的方法工作正常,但我需要一个通用函数来执行上述功能,即类名可能会有所不同。(例如)票,价格,代币,这样的约会:processGETRequest(AppController.getApiHelper().searchTickets(from, to), new RetrofitListener() {    @Override    public void onSuccess(Object object) { }    @Override    public void onSuccess(List<Object> object) {        // Here I'm getting retrofit response as a object //        if (object != null) {            // Below method is working fine //            List<Ticket> ticketList = new ArrayList<>();            for (Object result : object) {                String json = new Gson().toJson(result);                Ticket model = new Gson().fromJson(json, Ticket.class);                ticketList.add(model);            }            // I need an one common function for performing above functionality            // i.e the Class name may vary.. (e.g) Ticket, Price, Token, Appointment like this.        }    }    @Override    public void onError(String error) {        Log.d("error: ", " " + error);    }}, false);该RetrofitListener接口很简单:public interface RetrofitListener {    void onSuccess(Object object);    void onSuccess(List<Object> object);    void onError(String error);}
查看完整描述

3 回答

?
繁星淼淼

TA贡献1775条经验 获得超11个赞

您可以使用类似于以下内容的静态函数:


static <T> List<T> toList(List<Object> object, Class<T> desiredClass) {

    List<T> transformedList = new ArrayList<>();

    if (object != null) {

      for (Object result : object) {

          String json = new Gson().toJson(result);

          T model = new Gson().fromJson(json, desiredClass);

          transformedList.add(model);

      }

    }

    return transformedList;

}

基本上,您只需要确保提供所需的类型(例如desiredClass)并在fromJson.


示例用法:


List<Ticket> ticketList = toList(object, Ticket.class);

List<Price> priceList = toList(object, Price.class);

请注意,通过将 移动object != null到toList-method 中,您无需关心传递给该方法的内容。作为回报,您至少会得到一个空列表。


查看完整回答
反对 回复 2021-08-19
?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

您可以转换代码段


if (object != null) { 

                        List<Ticket> ticketList = new ArrayList<>();

                        for (Object result : object) {

                            String json = new Gson().toJson(result);

                            Ticket model = new Gson().fromJson(json, Ticket.class);

                            ticketList.add(model);

                        }    

                    }

像这样的泛型


<T> void check(Class<T> type, List<Object> object) {

        List<T> ticketList = new ArrayList<>();

        for (Object result : object) {

            String json = new Gson().toJson(result);

            T model = new Gson().fromJson(json, type);

            ticketList.add(model);

        }

    }


查看完整回答
反对 回复 2021-08-19
?
千巷猫影

TA贡献1829条经验 获得超7个赞

<T> List<T> getList(Class<T> type, List<Object> object) {

    return object.stream()

            .map(result -> new Gson().toJson(result))

            .map(new Gson().fromJson(json, type))

            .collect(Collectors.toList());

}


List<Ticket> ticketList = getList(Ticket.class, object);

这将完成您的 for 循环所做的工作。


查看完整回答
反对 回复 2021-08-19
  • 3 回答
  • 0 关注
  • 1621 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信