继承之前的一篇: 从非诚勿扰看数据索引,优化代码小妙招

直接将这个实用小算法封装成一个工具类。

public class IndexUtil {



/**

 * List转Map

 * @param list 原始列表数据(任何实现List接口的数据)

 * @param keyExtractor (抽取Key值的方法)

 * @return 加了索引的数据->Map

 */

public static <K,V> Map<K,V> fromList(List<V> list,Function<V,K> keyExtractor){



        Map<K,V> result = new HashMap<K, V>();

        for (Iterator<V> iterator = list.iterator(); iterator.hasNext();) {

                V v = (V) iterator.next();

                K extractorKey = keyExtractor.extractor(v);

                if(extractorKey == null) {

                        continue;

                }

        result.put(extractorKey, v);

}



        return result;

}



public static void main(String[] args) {

        User user = new User();

        user.setUserName("A");

        user.setPassword("1233544");



        List<User> userList = new ArrayList<User>();

        userList.add(user);

        user = new User();

        user.setUserName("B");

        user.setPassword("3r43");

        userList.add(user);

        user = new User();

        user.setUserName("C");

        user.setPassword("t5y6y");

        userList.add(user);

        Map<String, User> fromList = IndexUtil.fromList(userList, new Function<User, String>() {

                @Override

                public String extractor(User v) {

                        return v.getUserName();

                }

        });



                System.out.println(fromList.get("C").getPassword());

        }



}

Function是一个抽取Key值的接口,因为JDK1.6没有lamda表达式,所以只能用内部类了。

public interface Function<V,K> {

        K extractor(V v);

}

亲测有效,代码中这种情况还是挺多的,用工具类可以省去很多重复代码。

posted on 2022-05-05 21:35  剽悍一小兔  阅读(25)  评论(0编辑  收藏  举报  来源