jdk8流list转Map
/**
*
*/
package com.chuanglan.demo; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
import java.util.stream.Collectors; /**
* @author Maq.
* @createTime 2019年10月29日 下午4:33:38
*
*/
public class ListToMapDemo {
public static void main(String[] args) {
List<Student> list = new ArrayList<>(
Arrays.asList(
new Student("张三", 18, "b1"),
new Student("王二", 20, "b2"),
new Student("李四", 18, "b3")
)
);
// 源码
// public static <T, K, U>
// Collector<T, ?, Map<K,U>> toMap(Function<? super T, ? extends K> keyMapper,
// Function<? super T, ? extends U> valueMapper) {
// return toMap(keyMapper, valueMapper, throwingMerger(), HashMap::new);
// }
Map<String, String> map = list.stream().collect(Collectors.toMap(Student::getName, Student::getGrade));
Map<String, Student> map2 = list.parallelStream().collect(Collectors.toMap(studen->{return studen.getName();}, stude->{return stude;})); //或者
//Map<String, Student> map2 = list2.stream().collect(Collectors.toMap(Student::getName, Function.identity()));
Map<String, Integer> map3 = list.stream().collect(Collectors.toMap(item -> item.getName(), item -> item.getAge(),(oldVal, currVal) -> currVal,ConcurrentHashMap::new)); Map<String, Integer> map6 = list.stream().collect(Collectors.toMap(item -> "111", item ->2,(oldVal, currVal) -> currVal,ConcurrentHashMap::new));
map6.forEach( (k ,v)->{
System.out.println("k6: " + k + " v6:" + v);
});
map.forEach( (k ,v)->{
System.out.println("k: " + k + " v:" + v);
});
map2.forEach( (k ,v)->{
System.out.println("k: " + k + " v:" + v.getAge());
});
//key冲突 错误信息java.lang.IllegalStateException: Duplicate key b3
List<Student> list2 = new ArrayList<>(
Arrays.asList(
new Student("张三", 18, "b1"),
new Student("王二", 20, "b2"),
new Student("李四", 18, "b3"),
new Student("李四", 18, "b4")
)
);
Map<String, Student> map4 = list2.stream().collect(Collectors.toMap(Student::getName, Function.identity(),
(existing, replacement) -> existing)); //这样配置的话,发生冲突是existing会替代replacement
//多个属性为key
Map<String, Student> map5 = list2.stream().collect(Collectors.toMap(student -> student.getName()+student.getAge() , student->student, (existing, replacement) -> existing)); //这样配置的话,发生冲突是existing会替代replacement
map4.forEach( (k ,v)->{
System.out.println("k: " + k + " v:" + v.getGrade());
});
map5.forEach( (k ,v)->{
System.out.println("k: " + k + " v:" + v.getGrade());
});
}
}
jdk8流list转Map的更多相关文章
- jdk8 流操作
二.流 2.1 流介绍 流是Java API的新成员,它允许你以声明性方式处理数据集合(通过查询语句来表达,而不是临时编写一个实现).就现在来说,你可以把它们看成遍历数据集的高级迭代器.此外,流还可以 ...
- POJ 1087 最大流裸题 + map
A Plug for UNIX Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 15597 Accepted: 5308 ...
- Java流中的map算子和flatMap算子的区别
map算子和flatMap算子 map和flatMap都是映射(转换),那么他们之间究竟有什么区别呢? 1.我们先简单了解下map算子: @org.junit.Test public void tes ...
- 好记性-烂笔头:JDK8流操作
1):对象 List<User> 转 Map<String,Object> 案例如下: public class User { private Integer id; priv ...
- jdk8的特性stream().map()
转: https://blog.csdn.net/sanchan/article/details/70753645 java8的optional的使用: http://www.jdon.com/ide ...
- jdk8 新特性stream().map()
1.大写字符串列表 1.1 简单的Java示例将Strings列表转换为大写 TestJava8.java package com.mkyong.java8; import java.util.Arr ...
- jdk8对象集合转map集合
package koukay.Controller.Controllers; import koukay.Portal.webservices.Entity.User; import com.fast ...
- jdk8的stream流式计算的操作
jdk8之后增加了流式计算,现在根据学习了流式计算,并把过程记录下来: Person.java的bean package com.zhang.collectordemo; /** * @program ...
- jdk8可重复key的Map: IdentityHashMap
编写一个多条件过滤功能时,想使用map作为过滤条件的容器,由于存在同一健匹配多个值的情况,所以就发现了jdk8的新的map:IdentityHashMap.使用它完美解决了我的问题. 对比Identi ...
随机推荐
- comodo firewall 科莫多离线安装
comodo firewall是什么?他配有HIPS,配置好规则就可以比杀软强不是一个两个档次,但是新手不建议使用. 注意:不用使用疯狂模式后锁屏,不然系统都打不开. 下载地址: https://do ...
- ubuntu服务器上用Nginx和Uwsgi部署django项目
开发环境:ubuntu系统,python3环境 django项目目录: fast_foot 为项目根目录,app为项目应用 现在,我们登陆远程服务器 安装Nginx 安装好了,我们看一下nginx的配 ...
- C++调用windowsAPI实现目录zip压缩
TCHAR zipname[] = "C:\\bcel"; TCHAR zipfile [FILENAME_MAX]; sprintf(zipfile, "%s.zip& ...
- Django在使用Mysql迁移数据库时,会报的错
settings : DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'firstproject', ...
- 关于maven自动部署tomcat9 步骤
maven 自动部署tomcat9 (远程方法) 1.首先要去配置用户,在tomcat的conf中有tomcat_users.xml,在其中有tomcat-user的配置 配置:<tommcat ...
- Leetcode简单题
# Title Solution Acceptance Difficulty Frequency 1 Two Sum 44.5% Easy 2 Add Two Number ...
- 面试之什么是java虚拟机
java虚拟机体系结构 方法区 堆 java虚拟机栈 本地方法栈 方法区 java虚拟机编译的class文件中二进制数据类型解析数据存在方法区中 是所有线程共享 和存在数据的线程安全问题 当二个线程使 ...
- spring boot @Value源码解析
Spring boot 的@Value只能用于bean中,在bean的实例化时,会给@Value的属性赋值:如下面的例子: @SpringBootApplication @Slf4j public c ...
- ASCII、Unicode、UTF-8、UTF-16、GBK、GB2312、ANSI等编码方式简析
ASCII.Unicode.UTF-8.UTF-16.GBK.GB2312.ANSI等编码方式简析 序言 从各种字节编码方法中,能看到那个计算机发展的洪荒时期的影子. ASCII ASCII码有标准A ...
- Flask与微信小程序登录(后端)
开发微信小程序时,接入小程序的授权登录可以快速实现用户注册登录的步骤,是快速建立用户体系的重要一步.这篇文章将介绍 python + flask + 微信小程序实现用户快速注册登录方案(本文主要进行后 ...