Java-Collection、Map和Array之间的转换
2021-08-20 15:43
88 查看
1 List -> Map
设个User类:
public class User { private String userName; private String userId; private String userInfo; public User(){} public User(String userName, String userId, String userInfo) { this.userName = userName; this.userId = userId; this.userInfo = userInfo; } //getter setter }
1)foreach()方法
//foreach public Map<String,User> ltmForEach(List<User> list){ Map<String,User> map = new HashMap<>(); list.forEach(user -> { map.put(user.getUserId(), user); }); return map; }
2)collect()方法
//collect() public Map<String,User> ltmStream(List<User> list){ /** * Collectors.toMap()方法参数: * keyMapper: User::getUserId,调用User的getter方法 * valueMapper: user->user, User类作为value * mergeFunction: 当key冲突时,value合并的方法:(n1,n2)->n2为替换,(n1,n2)->n1+n2为累加 * mapSupplier: Map构造器,需要返回特定Map的时候使用,如TreeMap::new返回以key排序的Map */ return list.stream() .collect(Collectors.toMap(User::getUserId,user->user,(n1,n2)->n2,TreeMap::new)); }
3)Map常用遍历方法
// 1. 增强for循环 Map<String, User> ltmStreamMap = l.ltmStream(list); for(Map.Entry entry : ltmStreamMap.entrySet()){ System.out.println(entry.getKey()+" : "+entry.getValue()); } // 2. Iterator迭代器 Map<String, User> ltmForEachMap = l.ltmForEach(list); Iterator<Map.Entry<String, User>> iterator = ltmForEachMap.entrySet().iterator(); while(iterator.hasNext()){ Map.Entry<String, User> next = iterator.next(); System.out.println(next.getKey()+" : "+next.getValue()); } // 3. 内循环 Map<String, User> ltmForEachMap = l.ltmForEach(list); ltmForEachMap.forEach((k,v)->{ System.out.println(k+" : "+v); });
2 Array -> List
Array指数组类型数据,如:String[]、Object[]、int[]等
一般使用工具类Arrays的asList方法:
public class arrayToList { public static void main(String[] args) { String[] strs = new String[]{"a","b","c"}; List<String> list = Arrays.asList(strs); for(String str : list){ System.out.println(str); } } }
3 List -> Array
集合List转为数组类型Array
通常使用Collection的toArray方法
public class listToArray { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); //List->Array,申请大小为list.size()的数组空间 String[] strs = list.toArray(new String[list.size()]); } }
4 Array <-> Set
public class arrayToSet { public static void main(String[] args) { /** * Array数组类型转为Set类型集合 * 需要Array->List->Set */ String[] strs = new String[]{"a","b","c"}; Set<String> set = new HashSet<>(Arrays.asList(strs)); /** * Set转为Array和List转为Array原理相同 */ strs = set.toArray(new String[set.size()]); } }
5 List <-> Set
List和Set都实现了Collection借口,Collection.addAll()方法
相互转换可以通过:
1)Collection.addAll()
2)构造方法直接传入List/Set
/** * List -> Set */ Set set = new HashSet(list);//构造传参 set.addAll(list);//Collection.addAll() /** * Set -> List */ List list = new ArrayList(set); list.addAll(set);
相关文章推荐
- 轻松上手SpringBoot+SpringSecurity+JWT实RESTfulAPI权限控制实战
- Java Lambda 表达式源码分析
- Spring Boot 通用对象列表比较和去重
- SpringCloud与分布式服务
- SpringBoot - Interceptor拦截器实战
- Java-ThreadPool线程池总结
- 🏆【Java技术专区】「开发实战专题」Lombok插件开发实践必知必会操作!
- Java知识点复习Day08
- Java调用Zookeeper
- SpringBoot - jSR303校验的Message模板配置
- spring-data-jdbc的基础使用(一)
- Java - Stream的应用
- JAVA - Optional的使用
- Java Stream 源码分析
- ❤️大三的时候,看了这些Java面试题【附答案】,我进华为了![建议收藏]❤️
- Java程序设计(2021春)——第四章接口与多态课后题(选择题+编程题)答案与详解
- 寻找写代码感觉(一)之使用 Spring Boot 快速搭建项目
- SpringBoot-初见
- Java-个人杂记
- Java知识点复习Day06