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 ...
随机推荐
- DEV中右键菜单如何只在非空单元格上显示?
问题: 1. 开发时,我的winform程序中有很多gridview,我希望右键菜单只在我点击非空的行时才显示,点击其他空白区域时不显示: 2. 有一个树状导航图,treelist 中的节点都有右键菜 ...
- getsockopt和setsockopt函数
在Unix网络编程中通常用到getsockopt和setsockopt两个函数来获取和设置套接口的选项. getsockopt()函数用于获取任意类型.任意状态套接口的选项当前值,并把结果存入optv ...
- C++类中的Static关键字二
静态成员是可以独立访问的,也就是说,无须创建任何对象实例就可以访问,而静态成员函数可不建立对象就可以被使用. 或者说静态函数与一般函数没有太大的区别,只是访问有限制,静态变量跟一般的全局变量的区别 ...
- android 自定义Button,抛弃写shape文件
标签: android 控件 自定义 2017年05月27日 17:52:13 611人阅读 评论(0) 收藏 举报 分类: 自定义View(2) 作者同类文章 X 版权声明:本文为博主原创文章 ...
- 解决vue webApp使用lib-flexible和px2rem引用第三方ui库后,样式变小问题
首先,需要卸载项目中的postcss-px2rem. npm uninstall postcss-px2rem --save-dev 其次,安装postcss-px2rem-exclude npm i ...
- String工具类2
1:比较字符串 public static void main(String[] args) { // String去创建对象有多种方式 // 方式1 直接字面值赋值 String s = " ...
- 去除桌面SVN问号
由于误操作,桌面文件全部带着问号. 找到一种比较方便的方法解决. 1.显示受保护文件.文件夹win7系统 - 随便打开一个文件夹 - 在菜单栏里点 工具 - 文件夹选项 - 查看 以下如图中选择 2 ...
- iOS与H5交互(WKWbebView)
前言: 在iOS开发中,或多或少的会嵌入一些H5页面,有时候需要原生代码和H5页面进行交互.iOS8开始苹果推出性能更强大的WKWebView,所以一下方法是关于WKWebView与JS的交互. 创建 ...
- PyCharm更换sublime类似主题
1. 下载jar主题包 下载地址:https://github.com/spasserby/PyCharm-monokai 2.导入pycharm设置 导入方法:file-->Import Se ...
- Linux下Netty实现高性能UDP服务(SO_REUSEPORT)
参考: https://www.jianshu.com/p/61df929aa98b SO_REUSEPORT学习笔记:http://www.blogjava.net/yongboy/archive/ ...