继承之前的一篇: 从非诚勿扰看数据索引,优化代码小妙招
直接将这个实用小算法封装成一个工具类。
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);
}
亲测有效,代码中这种情况还是挺多的,用工具类可以省去很多重复代码。
分类:
一些零碎代码
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)