1. 程式人生 > >list轉map工具類

list轉map工具類

前言

專案中時長需要用到list轉map的場景,比如需要查詢所有使用者的訂單列表,但是使用者和訂單不在一個庫的時候,無法進行join操作,就只能程式處理:先查詢一批使用者,再根據使用者的id列表批量查詢訂單列表,然後在程式中拼接使用者和其對應訂單。因此寫了個小工具類處理,現在分享出來。

工具類程式碼

package utils;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.List;
import
java.util.Map; /** * Created by Jack.wu on 2017/5/23. */ public class ExtCollectionUtils { /** * list轉map * @param list * @param keyField 需要成為為鍵的欄位名稱 * @param <K> * @param <V> * @return */ public static <K,V> Map<K,V> listToMap(List<V> list, String keyField){ Map<K,V> result = new
HashMap<>(); if(list != null && list.size() > 0 && keyField != null && !"".equals(keyField)){ String firstLetter = keyField.substring(0, 1).toUpperCase(); String getter = "get" + firstLetter + keyField.substring(1); try { for
(Object obj : list){ Method method = obj.getClass().getMethod(getter,null); K key = (K) method.invoke(obj,null); if(key != null){ result.put(key,(V) obj); } } } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } return result; } }

測試

程式碼片段一:
public class Order {

    private Integer userId;

    private Integer orderId;

    private String orderName;

    //constructor
    //getter、setter
}
程式碼片段二:
public static void main(String[] args) {
    List list = new ArrayList();
    list.add(new Order(1,100,"訂單一"));
    list.add(new Order(2,200,"訂單二"));
    Map<Integer,Order> userMap = ExtCollectionUtils.listToMap(list,"userId");
    System.out.println(userMap.get(1).getOrderName());
}

// 訂單一