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 ...
随机推荐
- L1-016 查验身份证 (15 分)【考细心,考flag设置】
一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8, ...
- 2019OO第二单元总结
(1)设计策略 电梯第1次作业是一个傻瓜调度电梯,使用先来先服务原则,不用考虑捎带(可以认为电梯的载客量为1),因此比较简单,调度器用一个队列就可以. 使用生产者-消费者模型,输入线程是生产者,电梯是 ...
- [Day23]IO(字节流、字符流)
1.字节流 1.1 字节输出流OutputStream-抽象类,表示输出字节流的所有类的超类 (1)void close() 关闭此输出流并释放与此流相关的所有系统资源 (2)void flush() ...
- [daily][emacs][go] 配置emacs go-mode的编辑环境以及环境变量问题
1. 安装go 安装go-mode 使用emacs编辑go代码的时候,你需要有正常可运行的go环境. 并且有emacs的go-mode package https://www.emacswiki.or ...
- git rebase和git merge的用法
http://softlab.sdut.edu.cn/blog/subaochen/2016/01/git-rebase%E5%92%8Cgit-merge%E7%9A%84%E7%94%A8%E6% ...
- Windows bat批处理使用
mkdir commonmkdir datamkdir savemkdir data\tsushima_m_mapmkdir save\tsushima_m_map msxsl ..\common\r ...
- const成员函数用法
详见博客,该博客讲解得很详细,为节省时间就--
- php 数据库乱码。。。php 移动临时文件
数据库乱码,三个位置 处理好不会乱码 第一前台,传到后台: 第二后台,传到数据库: 第三数据库,存入数据库: 详解 https://www.cnblogs.com/zhoujinyi/p/46188 ...
- 在VM虚拟机中安装Centos操作系统
首先我们要下载 Centos https://www.centos.org/ 这个是Centos官方 最新版本 7 https://www.centos.org/download/ 提供有 DVD安 ...
- action,func简洁用法
new Action(() => { }).Invoke();new Action(() => { })(); new Func<int, int>(s => { ...