/**
*
*/
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. Linux常用目录名称

    目录 用途 / 虚拟目录的根文件,通常不会在这里存储文件 /bin 二进制目录,存放许多用户的GNU工具 /boot 启动目录,存放启动文件 /dev 设备目录,Linux在这里创建设备节点 /etc ...

  2. 【DSP开发】C6678的中断控制器

    分两层,一层是每个core内部的中断控制器,这个叫interrupt controller,简写intc:一层是整个芯片的,属于芯片级的,在每个core的外面,这个叫chip-level interr ...

  3. DCN模型

    1. DCN优点 使用Cross Network,在每一层都运用了Feature Crossing,高效学习高阶特征. 网络结构简单且高效 相比DNN,DCN的Logloss值更低,而且参数的数量少了 ...

  4. 什么是云数据库 HBase 版

    云数据库 HBase 版(ApsaraDB for HBase)是基于 Hadoop 的一个分布式数据库,支持海量的PB级的大数据存储,适用于高吞吐的随机读写的场景.目前在阿里内部有数百个集群,100 ...

  5. Git上传相关资料

    ############ssh key及 配置信息############# 设置Git的user name和email: $ git config --global user.name " ...

  6. Docker 构建私有镜像仓库

    在使用Docker一段时间后,往往会发现手头积累了大量的自定义镜像文件,这些文件通过公有仓库进行管理并不方便,另外有时候只是希望在内部用户之间进行分享,不希望暴露出去.这种情况下,就有必要搭建一个本地 ...

  7. Redis安全策略

    1. 开启redis密码认证,并设置高复杂度密码 描述 redis在redis.conf配置文件中,设置配置项requirepass, 开户密码认证. redis因查询效率高,auth这种命令每秒能处 ...

  8. oa_mvc_easyui_登录完成(2)

    1.使用MVC特有的ajax方式:异步表单提交方式 js文件引用:<script src="~/Scripts/jquery.unobtrusive-ajax.min.js" ...

  9. Axure(一)

    axure1.原型工具 2.软件开发 1.可行性分析2.需求分析    产品经理(和甲方对接需求,)    乙方     --   甲方 ps(专业性强,精美)  设计师        html(可变 ...

  10. 【Groovy】 Groovy笔记

    一.简单了解Groovy Groovy简介: Groovy是基于JVM的敏捷开发语言,语法与Java类似,但更加简洁,容错性也比Java强,同时Java能非常好的契合(例如Groovy能够使用Java ...