Java8 中常用的List Stream场景

Java8 中常用的List Stream场景

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

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

1
2
3
4
5
6
7
8
9
10
@Getter
@Setter
public class User
{
private String id;

private String name;

private Integer age;
}

List转Map

  1. Map中keyvalue都是User对象中的属性值

    1
    Map<String, String> userMap = users.stream().collect(Collectors.toMap(User::getId, User::getName));
  2. Map中keyUser对象的属性值,valueUser对象

    1
    Map<String, User> userMap = users.stream().collect(Collectors.toMap(User::getId, User -> User));
  3. 如果,我们的List中,key值重复,则会出现Duplicate key异常,这时候,我们可以使用覆盖的方式来避免这种异常

    1
    Map<String, User> userMap = users.stream().collect(Collectors.toMap(User::getId, Function.identity(), (oldVal, newVal) -> newVal));
  4. Map中keyUser对象的属性值,valueUserList

1
Map<String, List<User>> userMap = users.stream().collect(Collectors.groupingBy(User::getId));

filter

  1. list stream过滤数据

    1
    List<User> filterUsers=users.stream().filter(item -> item.getName().equals("xxx")).collect(Collectors.toList());
  2. 去重过滤

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    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());

    stream有提供distinct去重的函数。

sorted

1 .按年龄升序排

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

2.按年龄降序排

1
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的能力远比上面列举几个简单的功能要强大。

Java8 中常用的List Stream场景

https://blogs.52fx.biz/posts/2058332446.html

作者

eyiadmin

发布于

2023-02-28

更新于

2024-05-31

许可协议

评论