Java8 中常用的List Stream场景

开发 前端
在日常工作中,我们经常会遇到List转Map的情况,在Stream出来之前,我们一般都是遍历放进Map中。

Stream是Java 8添加的一个API,结合Lambda表达式,可以提高我们对对集合处理的编码效率。在日常工作中,我们经常会遇到List转Map的情况,在Stream出来之前,我们一般都是遍历放进map中。

这里,我们假设有个User对象。

@Getter
@Setter
public class User
{
private String id;

private String name;

private Integer age;
}

List转Map

  1. Map中keyvalue都是User对象中的属性值。
  2. Map<String, String> userMap = users.stream().collect(Collectors.toMap(User::getId, User::getName))。
  3. Map中keyUser对象的属性值,valueUser对象。
  4. Map<String, User> userMap = users.stream().collect(Collectors.toMap(User::getId, User -> User))。
  5. 如果,我们的List中,key值重复,则会出现Duplicate key异常,这时候,我们可以使用覆盖的方式来避免这种异常。
  6. Map<String, User> userMap = users.stream().collect(Collectors.toMap(User::getId, Function.identity(), (oldVal, newVal) -> newVal))。
  7. Map中keyUser对象的属性值,valueUserList。
Map<String, User> userMap = users.stream().collect(Collectors.groupingBy(User::getId));

filter

  1. list stream过滤数据
  2. List<User> filterUsers=users.stream().filter(item -> item.getName().equals("xxx")).collect(Collectors.toList());
  3. 去重过滤
  4. List<String> ids=new ArrayList<>(); List<User> distinctUsers=users.stream().filter(item->{ if(!ids.contains(item.getId())){ ids.add(item.getId()); return true; }else{ return false; } }).collect(Collectors.toList());
  5. stream有提供distinct去重的函数。

sorted

1 .按年龄升序排。

List<User> sortUsers= users.stream().sorted(Comparator.comparing(User::getAge)).collect(Collectors.toList());

2.按年龄降序排。

List<User> sortUsers= users.stream().sorted(Comparator.comparing(User::getAge).reversed()).collect(Collectors.toList());

除了上面的一些函数外,还有功能强大的函数,如:limitmaxreduce等。

Java Stream Debugger

在我们使用Stream之后,调试是一个问题。

IDEA 2018后,会自带Java Stream Debugger这个插件,有助于我们更直观的了解Stream的执行过程。插件有了,我们该如何使用呢?

  1. 在需要调试Stream的地方,打上断点。

2.debug模式启动后,在debug窗口中点击Trace Current Stream Chain

我们可以点击切换上面每一步的tab,查看其执行的一个大致过程,我们也可以切换到Flat Mode模式

这里只是列举了几个常用的API,针对Stream的能力远比上面列举几个简单的功能要强大。

责任编辑:姜华 来源: 今日头条
相关推荐

2023-05-12 07:40:01

Java8API工具

2020-05-25 16:25:17

Java8Stream函数式接口

2014-07-16 16:42:41

Java8streamreduce

2014-04-15 09:40:04

Java8stream

2019-10-11 08:41:18

JavaMemcached数据库

2024-10-09 08:42:03

2021-05-22 23:08:08

深度学习函数算法

2022-12-09 07:48:10

Java8Stream表达式

2022-12-30 09:24:23

Java8Stream操作

2022-04-14 15:12:40

Java8Stream列表

2021-02-18 16:06:43

JavaStream代码

2023-03-17 16:49:42

开发Java框架

2022-08-30 21:01:17

开发Java框架

2014-11-04 10:34:27

JavaCache

2024-03-11 16:01:29

BitMap数据去重开发

2020-07-24 08:11:04

Java8ava5语言

2016-11-29 12:46:24

JavaJava8时间日期库

2021-10-25 08:25:52

java8Stream api后端开发

2016-09-06 22:16:42

JavaDOCXPDF

2023-03-30 08:00:56

MySQL日期函数
点赞
收藏

51CTO技术栈公众号