/**
*
*/
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的更多相关文章

  1. jdk8 流操作

    二.流 2.1 流介绍 流是Java API的新成员,它允许你以声明性方式处理数据集合(通过查询语句来表达,而不是临时编写一个实现).就现在来说,你可以把它们看成遍历数据集的高级迭代器.此外,流还可以 ...

  2. POJ 1087 最大流裸题 + map

    A Plug for UNIX Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 15597   Accepted: 5308 ...

  3. Java流中的map算子和flatMap算子的区别

    map算子和flatMap算子 map和flatMap都是映射(转换),那么他们之间究竟有什么区别呢? 1.我们先简单了解下map算子: @org.junit.Test public void tes ...

  4. 好记性-烂笔头:JDK8流操作

    1):对象 List<User> 转 Map<String,Object> 案例如下: public class User { private Integer id; priv ...

  5. jdk8的特性stream().map()

    转: https://blog.csdn.net/sanchan/article/details/70753645 java8的optional的使用: http://www.jdon.com/ide ...

  6. jdk8 新特性stream().map()

    1.大写字符串列表 1.1 简单的Java示例将Strings列表转换为大写 TestJava8.java package com.mkyong.java8; import java.util.Arr ...

  7. jdk8对象集合转map集合

    package koukay.Controller.Controllers; import koukay.Portal.webservices.Entity.User; import com.fast ...

  8. jdk8的stream流式计算的操作

    jdk8之后增加了流式计算,现在根据学习了流式计算,并把过程记录下来: Person.java的bean package com.zhang.collectordemo; /** * @program ...

  9. jdk8可重复key的Map: IdentityHashMap

    编写一个多条件过滤功能时,想使用map作为过滤条件的容器,由于存在同一健匹配多个值的情况,所以就发现了jdk8的新的map:IdentityHashMap.使用它完美解决了我的问题. 对比Identi ...

随机推荐

  1. 【并行计算-CUDA开发】OpenCL、OpenGL和DirectX三者的区别

    什么是OpenCL? OpenCL全称Open Computing Language,是第一个面向异构系统通用目的并行编程的开放式.免费标准,也是一个统一的编程环境,便于软件开发人员为高性能计算服务器 ...

  2. Interceptors - 拦截器

    1.概述 Flume有能力在运行阶段修改/删除Event,这是通过拦截器(Interceptors)来实现的. 拦截器需要实现org.apache.flume.interceptor.Intercep ...

  3. 统计学习方法 | 第1章 统计学习方法概论 | numpy.linspace()

    numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) 在指定的间隔内返回均匀间隔的数字. 返回nu ...

  4. TOEFL | 听力题型

    通常是2个对话,4个讲座,但可能会有加试: 2~3 conversations  5 Questions/Each 4~6 lectures            6 Questions/Each 正 ...

  5. 继续做一道linux的企业 面试题

    把/dongdaxia目录及其子目录小所有以拓展名.sh结尾的文件中包含dongdaxia的字符串全部替换为dj. 解答:这道题还是用到了三剑客里的sed: 第一步:先在/dongdaxia目录及其子 ...

  6. [转帖]Linux查找文件6个高效工具

    Linux查找文件6个高效工具 https://www.linuxrumen.com/rmxx/176.html 需要实操 -inname -type 等等. 1. 前言 我们使用Linux过程中,经 ...

  7. ~艾比郎~学Python之Python基础

    第一步: 尝试写Hello World程序 这是我用Python写出的第一个程序,我的一小步,我人生的一大步 在linux 下创建一个文件叫hello.py,如图所示 然后执行命令:python he ...

  8. 什么是分布式关系型数据库服务 DRDS

    DRDS 产品简介 DRDS 是一款基于 MySQL 存储.采用分库分表技术进行水平扩展的分布式 OLTP 数据库服务产品,支持 RDS for MySQL 以及 POLARDB for MySQL, ...

  9. Django基础之模型(models)层(上)

    目录 Django基础之模型(models)层 单表查询 必知必会13条 神奇的双下划线查询 多表查询 外键的字段的增删改查 表与表之间的关联查询 基于双下划线的跨表查询(连表查询) 补充知识 Dja ...

  10. myBatis+Spring+SpringMVC框架面试题整理

    myBatis+Spring+SpringMVC框架面试题整理(一) 2018年09月06日 13:36:01 新新许愿树 阅读数 14034更多 分类专栏: SSM   版权声明:本文为博主原创文章 ...