Java8将List转为Map
1、实体
public class Hosting {
private int id;
private String name;
private long websites;
public Hosting(int id, String name, long websites) {
this.id = id;
this.name = name;
this.websites = websites;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public long getWebsites() {
return websites;
}
public void setWebsites(long websites) {
this.websites = websites;
}
@Override
public String toString() {
return "Hosting{" +
"id=" + id +
", name='" + name + '\'' +
", websites=" + websites +
'}';
}
}
2、将List转为Map
public class List2Map {
public static void main(String[] args) {
List<Hosting> hostings = new ArrayList<>();
hostings.add(new Hosting(1, "liquidweb.com", 80000));
hostings.add(new Hosting(2, "linode.com", 90000));
hostings.add(new Hosting(3, "digitalocean.com", 120000));
hostings.add(new Hosting(4, "aws.amazon.com", 200000));
hostings.add(new Hosting(5, "mkyong.com", 1));
// key = id, value = websites
Map<Integer, String> id2Name = hostings.stream()
.collect(Collectors.toMap(Hosting::getId, Hosting::getName));
System.out.println("id2Name: " + id2Name);
// key = name, value = websites
Map<String, Long> name2Websites = hostings.stream()
.collect(Collectors.toMap(Hosting::getName, Hosting::getWebsites));
System.out.println("name2Websites: " + name2Websites);
// key = id, value = websites
Map<Integer, String> id2NamDifferent = hostings.stream()
.collect(Collectors.toMap(h -> h.getId(), h -> h.getName()));
System.out.println("id2NamDifferent: " + id2NamDifferent);
}
}
3、将List转为Map(重复key的情况)
public class List2MapDuplicatedKey {
public static void main(String[] args) {
List<Hosting> hostings = new ArrayList<>();
hostings.add(new Hosting(1, "liquidweb.com", 80000));
hostings.add(new Hosting(2, "linode.com", 90000));
hostings.add(new Hosting(3, "digitalocean.com", 120000));
hostings.add(new Hosting(4, "aws.amazon.com", 200000));
hostings.add(new Hosting(5, "mkyong.com", 1));
hostings.add(new Hosting(6, "linode.com", 100000)); // 重复的key
// key = name, vaule = websites
Map<String, Long> name2Websites = hostings.stream()
.collect(Collectors.toMap(Hosting::getName, Hosting::getWebsites));
System.out.println("name2Websites: " + name2Websites);
}
}
在上面一段代码中,"linbode.com"做为key被add两次,那么在转为map过程会发生什么?如下:

如何解决重复key的情况?只需要在16行加入如下处理即可:
public class List2MapDuplicatedKey {
public static void main(String[] args) {
List<Hosting> hostings = new ArrayList<>();
hostings.add(new Hosting(1, "liquidweb.com", 80000));
hostings.add(new Hosting(2, "linode.com", 90000));
hostings.add(new Hosting(3, "digitalocean.com", 120000));
hostings.add(new Hosting(4, "aws.amazon.com", 200000));
hostings.add(new Hosting(5, "mkyong.com", 1));
hostings.add(new Hosting(6, "linode.com", 100000)); // 重复的key
// key = name, vaule = websites
Map<String, Long> name2Websites = hostings.stream()
.collect(Collectors.toMap(Hosting::getName, Hosting::getWebsites,
(oldValue, newValue) -> newValue));
System.out.println("name2Websites: " + name2Websites);
}
}
4、将List转为Map并排序
public class List2MapWithSort {
public static void main(String[] args) {
List<Hosting> hostings = new ArrayList<>();
hostings.add(new Hosting(1, "liquidweb.com", 80000));
hostings.add(new Hosting(2, "linode.com", 90000));
hostings.add(new Hosting(3, "digitalocean.com", 120000));
hostings.add(new Hosting(4, "aws.amazon.com", 200000));
hostings.add(new Hosting(5, "mkyong.com", 1));
hostings.add(new Hosting(6, "linode.com", 100000));
// key = name, vaule = websites
Map<String, Long> name2Websites = hostings.stream()
.sorted(Comparator.comparing(Hosting::getWebsites).reversed())
.collect(Collectors.toMap(Hosting::getName, Hosting::getWebsites,
(oldValue, newValue) -> newValue, // 如果有相同的key,使用新key
LinkedHashMap::new)); // 返回ListedHashMap,保持有序
System.out.println("name2Websites: " + name2Websites);
}
}
Java8将List转为Map的更多相关文章
- 用Java8把List转为Map
1 import com.yang.test.User; 2 3 import javax.jws.soap.SOAPBinding; 4 import java.util.*; 5 import j ...
- Java 8中Collection转为Map的方法
Java 8中java.util.stream.Collectors提供了几个方法可用于把Collection转为Map结构,本文记录了个人对其中三个的理解. Method Return Type g ...
- 【转】Java8中list转map方法总结
https://blog.csdn.net/zlj1217/article/details/81611834 背景在最近的工作开发之中,慢慢习惯了很多Java8中的Stream的用法,很方便而且也可以 ...
- javabean实体类对象转为Map类型对象的方法(转发)
//将javabean实体类转为map类型,然后返回一个map类型的值 public static Map<String, Object> beanToMap(Object obj) { ...
- java8--List转为Map、分组、过滤、求和等操作----代码示例
Java 8 函数式编程风格 Java 迄今为止最令人激动的特征.这些新的语言特征允许采用函数式风格来进行编码,我们可以用这些特性完成许多有趣的功能.这些特性如此有趣以至于被认为是不合理的.他们说会影 ...
- json数据转为Map集合
我是利用Gson来弄得Gson gson = new Gson();//显得出HashMap的类型Type type = new TypeToken<HashMap<String, Str ...
- JAVA中将对象转为Map类型
之前讲过将Map转为JAVA对象的文章,那么问题来了,如果要把JAVA对象转为Map,又该怎么操作呢?这里亲测了2个方法可行,但目前这2个方法都是基于简单JAVA Bean的情况(即Bean中不能嵌套 ...
- java中list强转为map类型
起因:读取数据库文件的测试用例,测试用例需要存放到一个map中,方便下次调用, 读取的内容返回的内容存放在一个list中,并且数据内容是key=value的形式,最开始使用切片方式,做了很多无用功,后 ...
- XML字符串转为Map集合
public class xmlToMapUtils { /** * xml字符串转为map集合 * @param xmlStr * @return */ public static Map<S ...
随机推荐
- Tomcat报错invalid LOC header
原因: 可能是jar包有问题. 解决方法: 1.找到加载不了的类对应的jar包. 2.在tomcat中webapps/INF/lib中找到对应的jar包,然后删除. 3.重新下载其它版本的jar包. ...
- C语言一个程序的存储空间
按区域划分: 堆区:自动分配内存区.//堆栈段 栈区:手动分配内存区.//堆栈段 全局(静态)区:静态变量和全局变量.//数据段(读写) 常量区:存放const全局变量和字符串常量.//数据段(只读) ...
- 学习虚拟机时Vbox提示硬件加速不可用时应该怎么办?
也不知大家在安装或使用虚拟机时有没有出现过这样的现象?Vbox提示硬件加速不可用? 在学习Java和安装虚拟机时,自己的电脑上出现Vbox提示Vt-x硬件加速不可用,但后也知道了方法怎么弄! 方法及步 ...
- jenkins安装与配置---windows系统
记录安装过程中的步骤及遇到的坑,以做借鉴 服务器主机系统: windows9 ; 已安装开发环境: jdk8 ; 我采用的是war包直接运行的方式: 1.下载最新的版本(一个 WAR 文件).Jen ...
- facebook分享
http://bbs.mob.com/forum.php?mod=viewthread&tid=19104&page=1&extra=#pid40942 应用审核 http: ...
- centos禁ping
Linux默认是允许Ping响应的,系统是否允许Ping由2个因素决定的:A.内核参数,B.防火墙,需要2个因素同时允许才能允许Ping,2个因素有任意一个禁Ping就无法Ping. 具体的配置方法如 ...
- 【Nginx】-NO.141.Nginx.1 -【Nginx】
Style:Mac Series:Java Since:2018-09-10 End:2018-09-10 Total Hours:1 Degree Of Diffculty:5 Degree Of ...
- Leetcode: Number Complement
Given a positive integer, output its complement number. The complement strategy is to flip the bits ...
- ssl证书 以及phpstudy配置ssl证书
首先,确保你的Apache编译了SSL模块,这是支持SSL证书必要的条件(如果没有,请编译,[打开phpstudy]>[其他选项菜单]>[PHP扩展]>[php-openssl]前面 ...
- javascript中 for-in和 for-of的区别
其中for-of是ES6新增的迭代语法 在MDN上的解释: for...in语句以任意顺序遍历一个对象的可枚举属性.对于每个不同的属性,语句都会被执行.for...of语句在可迭代对象(包括 Arra ...