我想在列表中添加第二个过滤器,我想排除空字符串旁边的字符串列表中的副本.
以下是我尝试使用流API的方法:
这将区分结果,但不是空的
List<User> users = userService.getUsers(form.getId());
List<String> positionNames = users.stream().map(User::getTitle).distinct().collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
我怎样才能将它们组合在一起?
您可以使用filter仅保留非空字符串:
List<String> positionNames = users.stream()
.map(User::getTitle)
.distinct()
.filter(s -> !s.isEmpty())
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
如果您不关心订单,收集到a Set将具有与使用相同的效果distinct():
Set<String> positionNames = users.stream()
.map(User::getTitle)
.filter(s -> !s.isEmpty())
.collect(Collectors.toSet());
Run Code Online (Sandbox Code Playgroud)
编辑:如果null某些用户有标题,您可能还想将其过滤掉:
Set<String> positionNames = users.stream()
.map(User::getTitle)
.filter(s -> s != null && !s.isEmpty())
.collect(Collectors.toSet());
Run Code Online (Sandbox Code Playgroud)
或者filter两次打电话:
Set<String> positionNames = users.stream()
.map(User::getTitle)
.filter(Objects::nonNull)
.filter(s -> !s.isEmpty())
.collect(Collectors.toSet());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
710 次 |
| 最近记录: |