随笔 - 434,  文章 - 0,  评论 - 463,  阅读 - 46万

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

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

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   剽悍一小兔  阅读(32)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示