tnblog
首页
视频
资源
登录

三种Collectors的用法(排序)

6648人阅读 2021/12/9 13:38 总访问:1474309 评论:0 收藏:0 手机
分类: Java

原文链接:https://blog.csdn.net/qq_37253891/article/details/108488919

java8 stream().map().collect()的
Collectors.toList()、
案例1

  1. List<Long> idList = users.stream().map(User::getId).collect(Collectors.toList());

其中有个User::getId,这个其实就是调用User类的getId()方法。
案例2

  1. List<String> list = Arrays.asList("a""b""c""d");
  2. List<String> results = list.stream().map(String::toUpperCase).collect(Collectors.toList());
  3. System.out.println(results); //{A, B, C, D}


Collectors.toMap()、

Collectors.toMap(),一般用于将一个List转换为Map。常见用法:

list.stream().collect(Collectors.toMap(Function keyMapper, Function valueMapper))

  1. List<User> userList = new ArrayList<>();
  2. userList.add(new User(1"张三"18));
  3. userList.add(new User(2"李四"19));
  4. userList.add(new User(3"王五"18));
  5. //将userList转化为key为id,value为User对象的map
  6. Map<Long, User> map = userList.stream().collect(Collectors.toMap(User::getId, p -> p));

Map<Long, User> map = userList.stream().collect(Collectors.toMap(User::getId, p -> p));这一步就是将userList 转换为key为id,value为User对象的map。


User::getId ===》 User对象的getId方法

p -> p ===》就是进来的是什么,最终就是什么,这里就是进来的是User对象,出去的也就是User对象
?
?还可以换一下:

  1. Map<Long, String> map = userList.stream().collect(Collectors.toMap(User::getId, User::getName));

2. 三个参数的用法

??还是沿用上面那个例子,如果这个时候你想获取key是age,value是name的map呢?如果你还是沿用上面的方法,就会出问题了,因为有两个age是 18 的数据,也就是存在重复的key,会直接报错,想不报错的话,就可以利用第三个参数了。

  1. Map<Integer, String> map = userList.stream().collect(Collectors.toMap(User::getAge, User::getName, (a, b) -> b));

??(a, b) -> b的意思就是,如果存在重复的,永远取后面一个


??这时,map里的值就是:

  1. {
  2. 18"王五"
  3. 19"李四"
  4. }

Collectors.groupingBy()的用法

还是沿用上面那个例子。当你想获取key是age的map,又不想覆盖掉重复项数据,这个时候就可以用 Collectors.groupingBy 了。

  1. Map<Integer, List<User>> map = userList.stream().collect(Collectors.groupingBy(User::getAge));

??可以看到,这次的返回值变成了 Map<Integer, List> 了,也就是说,变成了key是age,value是User对象的集合了。这时,map里的值就变成了:

  1. {
  2. 18: [User(1"张三"18), User(3"王五"18)]
  3. 19: [User(2"李四"19)]
  4. }


评价

jqurey 冒泡事件 样式叠加解决三种方法

同时设置不同层的事件会叠加$(function () { $(&quot;.one&quot;).click(function () { console.log(event.target) console...

EF三种模式解析

万般皆下品,惟有编程高我希望你是为我而来如果我爱你,而你也正巧爱我。你头发乱了时候,我会笑笑地替你拨一拨,然后,手...

MVC 向前台传递值的三种方法

通过ViewData向前台传递字符串ViewData[&quot;str&quot;]=&quot;666&quot;;通过ViewBag向前台传递字符串ViewBag.str=&quot;...

MVC 向后台传递值的三种方法

前台向后台传值一、地址栏问号传参(不常用,安全性低)例如:http://localhost:6042/Home/index?Id=1&amp;&amp;UserName=x...

AOP配置(XML)-三种切入点配置方式 04

一、案例、1、公共切入点2、局部切入点3、直接配置的切入点二、

vue element 三种信息提示框。错误提示,警告提示,消息提示

代码如下&lt;template&gt; &lt;el-button :plain=&quot;true&quot; @click=&quot;open2&quot;&gt;成功&lt;/el-button&gt...
没有个性,不需要签名
排名
4
文章
473
粉丝
3
评论
2
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术