1. /**
  2. *
  3. */
  4. package com.chuanglan.demo;
  5.  
  6. import java.util.ArrayList;
  7. import java.util.Arrays;
  8. import java.util.List;
  9. import java.util.Map;
  10. import java.util.concurrent.ConcurrentHashMap;
  11. import java.util.function.Function;
  12. import java.util.stream.Collectors;
  13.  
  14. /**
  15. * @author Maq.
  16. * @createTime 2019年10月29日 下午4:33:38
  17. *
  18. */
  19. public class ListToMapDemo {
  20. public static void main(String[] args) {
  21. List<Student> list = new ArrayList<>(
  22. Arrays.asList(
  23. new Student("张三", 18, "b1"),
  24. new Student("王二", 20, "b2"),
  25. new Student("李四", 18, "b3")
  26. )
  27. );
  28. // 源码
  29. // public static <T, K, U>
  30. // Collector<T, ?, Map<K,U>> toMap(Function<? super T, ? extends K> keyMapper,
  31. // Function<? super T, ? extends U> valueMapper) {
  32. // return toMap(keyMapper, valueMapper, throwingMerger(), HashMap::new);
  33. // }
  34. Map<String, String> map = list.stream().collect(Collectors.toMap(Student::getName, Student::getGrade));
  35. Map<String, Student> map2 = list.parallelStream().collect(Collectors.toMap(studen->{return studen.getName();}, stude->{return stude;})); //或者
  36. //Map<String, Student> map2 = list2.stream().collect(Collectors.toMap(Student::getName, Function.identity()));
  37. Map<String, Integer> map3 = list.stream().collect(Collectors.toMap(item -> item.getName(), item -> item.getAge(),(oldVal, currVal) -> currVal,ConcurrentHashMap::new));
  38.  
  39.        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);
        }); 

  1.        map.forEach( (k ,v)->{
  2. System.out.println("k: " + k + " v:" + v);
  3. });
  4. map2.forEach( (k ,v)->{
  5. System.out.println("k: " + k + " v:" + v.getAge());
  6. });
  7. //key冲突 错误信息java.lang.IllegalStateException: Duplicate key b3
  8. List<Student> list2 = new ArrayList<>(
  9. Arrays.asList(
  10. new Student("张三", 18, "b1"),
  11. new Student("王二", 20, "b2"),
  12. new Student("李四", 18, "b3"),
  13. new Student("李四", 18, "b4")
  14. )
  15. );
  16. Map<String, Student> map4 = list2.stream().collect(Collectors.toMap(Student::getName, Function.identity(),
  17. (existing, replacement) -> existing)); //这样配置的话,发生冲突是existing会替代replacement
  18. //多个属性为key
  19. Map<String, Student> map5 = list2.stream().collect(Collectors.toMap(student -> student.getName()+student.getAge() , student->student, (existing, replacement) -> existing)); //这样配置的话,发生冲突是existing会替代replacement
  20.  
  21. map4.forEach( (k ,v)->{
  22. System.out.println("k: " + k + " v:" + v.getGrade());
  23. });
  24. map5.forEach( (k ,v)->{
  25. System.out.println("k: " + k + " v:" + v.getGrade());
  26. });
  27.  
  28. }
  29. }

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. 配置传统vlan间路由

    S1#SH RUN spanning-tree mode pvst ! interface FastEthernet0/1 switchport access vlan 10 switchport m ...

  2. 【Python开发】使用python中的matplotlib进行绘图分析数据

    matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图.而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中. 它的文档相当完备, ...

  3. pubwin2009 备份文件恢复

    local_db.DBBak 恢复注意: 1.先安装好全新server -> 用SQLManager连接数据库 连接时右键编辑 SQLSERVER注册属性  默认sql连接 帐号netcafe ...

  4. aliyun挂载oss

    配置 oss 挂载 阿里云 ecs 按照ossfs工具:yum install http://gosspublic.alicdn.com/ossfs/ossfs_1.80.5_centos6.5_x8 ...

  5. supervisor管理superset

    参考: https://blog.51cto.com/qiangsh/2153185 安装supervisor: pip install supervisor 停止supervisor管理的服务: [ ...

  6. luoguP2822-组合数问题(基础DP)

    题目链接:https://www.luogu.org/problemnew/show/P2822 题意:输入T和k,有T组询问.每组询问输入n.m,求C(i,j)能模k的个数(0<=i<= ...

  7. Oracle密码过期(the password has expired)

    1.进入sqlplus模式--sqlplus / as sysdba; 2.查看用户密码的有效期设置(一般默认的配置文件是DEFAULT) SELECT * FROM dba_profiles WHE ...

  8. 转-性能优化中CPU、内存、磁盘IO、网络性能的依赖

    转自:https://www.cnblogs.com/Javame/p/3665565.html 系统优化是一项复杂.繁琐.长期的工作,优化前需要监测.采集.测试.评估,优化后也需要测试.采集.评估. ...

  9. Fiddler-打断点(bpu)

    一.断点 1.为什么要打断点? 比如一个购买的金额输入框,输入框前端做了限制大于100,那么我们测试的时候,需要测试小于100的情况下.很显然前端只能输入大于100的.这时我们可以先抓到接口,修改请求 ...

  10. NIKKEI Programming Contest 2019-2 Task E. Non-triangular Triplets

    $\require{enclose}$ 必要条件 一方面 $\sum_{i=1}^{N}(a_i + b_i) \le \sum_{i=1}^{N} c_i \implies 2\sum_{i=1}^ ...