java map 转list,list
今天介绍一个实用的小知识点,如何将目录转为映射对象,列表对象
1. 基本写法
最开始介绍的当然是最常见、最直观的写法,当然也是任何限制的写法
//比如将下面的列表,按照字符串长度进行分组ListString list=new ArrayList();列表。添加( hello );列表。add( word );列表。添加(来);列表。添加(“on”);MapInteger,list string ans=new HashMap();for(String String : list){ ListString sub=ans。获取(字符串。length());if(sub==null){ sub=new ArrayList();ans.put(str.length(),sub);} add(str);}系统。出去。println(ans);对于jdk8,上面为循环中的内容可以利用地图。计算缺席来替换,具体写法如下
for(字符串:列表){ ans。computeifake(字符串。length(),k - new ArrayList().add(str);}当然既然已经是jdk1.8了,借助溪流的流处理,可以将上面的更一步进行简化,如下
MapInteger,ListString ans=list.stream().收藏(收藏者。分组依据(字符串:长度));
2. 通用方法
上面是针对特定的列表,针对业务进行开发转换,那么我们接下来尝试构建一个通用的工具类
这里我们主要借助的知识点就是泛型,一个重要的点就是如何获取地图中的键对于jdk 1.8的写法,通过接口来定义实现键的获取姿势
public static K,V MapK,ListV toMapList(ListV list,KeyFuncV,K keyFunc) { MapK,ListV result=new HashMap();对于(V项:列表){ K key=key func。getkey(item);如果(!结果。包含key(key)){ result。put(key,new ArrayList());} result.get(key).添加(项目);}返回结果;}公共静态接口KeyFuncT,K { K getKey(T T);}使用演示如下
public static void main(String[]args){ list String list=new ArrayList();列表。添加( hello );列表。add( word );列表。添加(来);列表。添加(“on”);MapInteger,ListString res=toMapList(list,new KeyFuncString,Integer(){ @ Override public Integer getKey(String s){ return s . length();} });系统。出去。println(RES);}接下来再看一下jdk1.8之后的写法,结合溪流函数方法来实现
public static K,V MapK,ListV toMapList(ListV list,FunctionV,K func) { return list.stream().收藏(收藏者。分组依据(func));}其对应的使用方式则如下
public static void main(String[]args){ list String list=new ArrayList();列表。添加( hello );列表。add( word );列表。添加(来);列表。添加(“on”);MapInteger,ListString res=toMapList(list,(FunctionString,Integer)string :3360 length);系统。出去。println(RES);}
3. 工具类
上一节介绍了基于泛型jdk8流函数方法来实现通用转换工具类的实现姿势,接下来我们小结一下,输出一个适用于1.8之后的工具类
/***列表电视转换为MapK,ListV特点在于地图中的值,是个列表,且列表中的元素就是从原列表中的元素** @param list* @param func基于列表#项目生成Map.key的函数方法* @ param K * @ param V * @ return */public static K,V MapK,ListV toMapList(ListV list,FunctionV,K func) { return list.stream().收藏(收藏者。分组依据(func));}/*** ListI转换为MapK,ListV特点在于地图中的价值是个列表,且列表中的元素是由列表.项目转换而来** @param list* @param keyFunc基于列表#项目生成的Map.key的函数方法* @param valFunc基于列表#项目转换地图值列表中元素的函数方法* @ param K * @ param I * @ param V * @ return */public static K,I,V MapK,ListV toMapList(ListI list,FunctionI,K keyFunc,FunctionI,V valFunc) { return list.stream().收藏(收藏者。分组依据(key func,Collectors.mapping(valFunc,Collectors。to list()));}
4.guava HashMultimap扩展知识点
最后再介绍一个扩展知识点,高瓦工具包中提供了一个HashMultimap的工具类,他的使用姿势和我们平常的地图并无差别,但是需要在注意的是,它的价值是个集合
ListString list=new ArrayList();list . add( hello );list . add( word );list . add( come );list . add( on );list . add( on );HashMultimapInteger,String map=hashmultimemap . create();for(String item : strList){ map . put(item . length(),item);} system . out . println(map);实际输出如下,验证了value实际上是一个集合(上只有一个,如果是我们上面的工具类,就输出两个)
{ 2=[开],4=[字,来],5=[你好]}
关于Java中实现从列表到映射列表的几种姿势的这篇文章到此结束。关于Java中列表到映射列表转换的更多信息,请搜索热门IT之前的文章或者继续浏览下面的相关文章。我希望你以后能更多地支持流行音乐!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。