Java 8 的List<V> 转成 Map<K, V>
问题: Java 8 的List 转成 Map<K, V>
我想要使用Java 8的streams和lambdas转换一个 List 对象为 Map
下面是我在Java 7里面的写法
private Map<String, Choice> nameMap(List<Choice> choices) {final Map<String, Choice> hashMap = new HashMap<>();for (final Choice choice : choices) {hashMap.put(choice.getName(), choice);}return hashMap;
}
我可以很轻松地用Java8和Guava搞定,但是呢我又不知道怎么不用Guava搞定
Guava写法:
private Map<String, Choice> nameMap(List<Choice> choices) {return Maps.uniqueIndex(choices, new Function<Choice, String>() {@Overridepublic String apply(final Choice input) {return input.getName();}});
}
Guava +Java 8 lambdas写法:
private Map<String, Choice> nameMap(List<Choice> choices) {return Maps.uniqueIndex(choices, Choice::getName);
}
回答一:
基于Collectors 文档,可以简写成为:
Map<String, Choice> result =choices.stream().collect(Collectors.toMap(Choice::getName,Function.identity()));
回答二
如果你的key不保证对于每个list中每个元素都是独一无二的,你就应该转换成Map<String, List>而不是Map<String, Choice>
Map<String, List<Choice>> result =choices.stream().collect(Collectors.groupingBy(Choice::getName));
回答三
用 getName() 作为 key 并且Choice 本身作为map的value:
Map<String, Choice> result =choices.stream().collect(Collectors.toMap(Choice::getName, c -> c));
回答四
上述的大部分回答的忽略了一种情况了就是当list有重复元素的时候。这种情况下就会抛出 IllegalStateException,参考下面的代码去处理重复的list元素吧
public Map<String, Choice> convertListToMap(List<Choice> choices) {return choices.stream().collect(Collectors.toMap(Choice::getName, choice -> choice,(oldValue, newValue) -> newValue));}
回答五
例如你想转换对象的一些域到map上:
对象是:
class Item{private String code;private String name;public Item(String code, String name) {this.code = code;this.name = name;}//getters and setters}
List 转 Map的操作是:
List<Item> list = new ArrayList<>();
list.add(new Item("code1", "name1"));
list.add(new Item("code2", "name2"));Map<String,String> map = list.stream().collect(Collectors.toMap(Item::getCode, Item::getName));
文章翻译自Stack Overflow:https://stackoverflow.com/questions/20363719/java-8-listv-into-mapk-v
Java 8 的List<V> 转成 Map<K, V>相关推荐
- Java反射之将对象转成map
有时,我们在工程中需要将对象转成map 我们在objectToMap方法中传入对象参数,返回的就是map. ReflectUtil.java import java.lang.reflect.Fiel ...
- java string转map_Java string类型转换成map代码实例
Java string类型转换成map代码实例 背景:有时候string类型的数据取出来是个很标准的key.value形式,通过Gson的可以直接转成map 使用方式: Gson gson = new ...
- Map(String ArrayList(Student))相关操作和遍历和利用Map(k v)统计字母出现次数
public class MapSaveArrayListDemo {public static void main(String[] args) {//定义一个Mapy集合,且于存放ArrayLis ...
- JAVA day20、21 双列集合Map<K,V>:HashMap,LinkedHashMap,TreeMap,Hashtable, ConcurrentHashMap;JDK1.9新特性
一.Map<K,V> Java提供了专⻔的集合类⽤来存放这种这种⼀⼀对应的关系,叫做映射对象,即 java.util.Map 接⼝. 类型参数: K - 此映射所维护的键的类型 V - 映 ...
- java 集合之Interface Map<K,V> HashMap实现类
java 集合之Interface Map<K,V> 类型参数:K- 此映射所维护的键的类型:V- 映射值的类型 将键映射到值的对象. 一个映射不能包含重复的键: 每个键最多可以映射到一个 ...
- Java自学第6期——Collection、Map、迭代器、泛型、可变参数、集合工具类、集合数据结构、Debug
欢迎访问我的个人网站:https://bengtian.club 集合:集合是java中提供的一种容器,可以用来存储多个数据. 集合和数组既然都是容器,它们有啥区别呢? 数组的长度是固定的.集合的长度 ...
- Java集合框架概述(四)——Map体系集合与底层实现原理
一.Map父接口 1.概要 方法 描述 public interface Map<K,V> 将键映射到值的对象. 一个映射不能包含重复的键; 每个键可以映射到最多一个值. 将键映射到值的 ...
- Java高级编程知识—8.2、Map接口
文章目录 8.2.Map接口 1.1 Map接口 1.2 Map接口实现类 1.3 HashMap底层原理 JDK7 JDK8 1.4 LinkedHashMap底层原理 1.5 Collection ...
- Java中的集合(Collection,Map)
集合类体系结构 Collection集合 Collection集合概述 是单例集合的顶层接口,它表示一组对象,这些对象也被成为Collection元素 JDK不提供此接口的任何直接实现,它提供更具体的 ...
最新文章
- 新盒模型移动端的排版
- Javascript:字符串分割split()妙用
- CountDownLatch 的使用小例
- ASP.NET 2.0 – 如何巢状化GridView控件
- 设置Table单元格颜色(Table篇三)
- satd残差_RDO、SAD、SATD、λ相关概念【转】
- Netty高性能之道
- dism++封装系统使用教程_【原创】最新WIN10系统封装教程2019系列(一)——定制母盘...
- 安卓玩机教程---全机型安卓4----安卓12 框架xp edx lsp安装方法
- 如何检测页面是否允许访问Cookie
- HDU5773(The All-purpose Zero LIS变形)
- Python汉字转拼音(xpinyin)
- windowsXPsp3恢复桌面IE图标
- 顶尖作者介绍 | 心理学领域研究“情绪”的大牛们有哪些?
- 【c语言】printf和scanf中* # %g的作用
- 算法租用游艇问题c语言,动态规划租用游艇问题
- 数据库系统概论:判别一个分解的无损连接性
- 如何计算俩日期相隔多少年,多少月,多少天或者两时间相差XX年XX月XX日
- win10 itunes更新ios系统异常 提示“未能恢复iPhone 发生未知错误(14)”
- 【百度地图】制作多途经点的线路导航,模拟运动 (vue,typescript)