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

这是将改造响应作为对象获取的代码。下面的方法工作正常,但我需要一个通用函数来执行上述功能,即类名可能会有所不同。(例如)票,价格,代币,这样的约会:


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);

}


ibeautiful
浏览 1702回答 3
3回答

繁星淼淼

您可以使用类似于以下内容的静态函数:static <T> List<T> toList(List<Object> object, Class<T> desiredClass) {&nbsp; &nbsp; List<T> transformedList = new ArrayList<>();&nbsp; &nbsp; if (object != null) {&nbsp; &nbsp; &nbsp; for (Object result : object) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; String json = new Gson().toJson(result);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; T model = new Gson().fromJson(json, desiredClass);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; transformedList.add(model);&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; return transformedList;}基本上,您只需要确保提供所需的类型(例如desiredClass)并在fromJson.示例用法:List<Ticket> ticketList = toList(object, Ticket.class);List<Price> priceList = toList(object, Price.class);请注意,通过将 移动object != null到toList-method 中,您无需关心传递给该方法的内容。作为回报,您至少会得到一个空列表。

梵蒂冈之花

您可以转换代码段if (object != null) {&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; List<Ticket> ticketList = new ArrayList<>();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (Object result : object) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; String json = new Gson().toJson(result);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Ticket model = new Gson().fromJson(json, Ticket.class);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ticketList.add(model);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }像这样的泛型<T> void check(Class<T> type, List<Object> object) {&nbsp; &nbsp; &nbsp; &nbsp; List<T> ticketList = new ArrayList<>();&nbsp; &nbsp; &nbsp; &nbsp; for (Object result : object) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; String json = new Gson().toJson(result);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; T model = new Gson().fromJson(json, type);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ticketList.add(model);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }

千巷猫影

<T> List<T> getList(Class<T> type, List<Object> object) {&nbsp; &nbsp; return object.stream()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .map(result -> new Gson().toJson(result))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .map(new Gson().fromJson(json, type))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .collect(Collectors.toList());}List<Ticket> ticketList = getList(Ticket.class, object);这将完成您的 for 循环所做的工作。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java