我想在列表中添加第二个过滤器,我想在字符串列表中将不同的副本排除在旁边。
以下是我尝试使用流API:
这将区分结果,但不是空
List<User> users = userService.getUsers(form.getId());
List<String> positionNames = users.stream().map(User::getTitle).distinct().collect(Collectors.toList());
我如何将它们组合在一起?
答案 0 :(得分:7)
您可以使用filter
仅保留非空字符串:
List<String> positionNames = users.stream()
.map(User::getTitle)
.distinct()
.filter(s -> !s.isEmpty())
.collect(Collectors.toList());
如果您不关心订单,收集到Set
与使用distinct()
具有相同的效果:
Set<String> positionNames = users.stream()
.map(User::getTitle)
.filter(s -> !s.isEmpty())
.collect(Collectors.toSet());
编辑:如果某些用户有null
个标题,您可能还想将其过滤掉:
Set<String> positionNames = users.stream()
.map(User::getTitle)
.filter(s -> s != null && !s.isEmpty())
.collect(Collectors.toSet());
或者两次致电filter
:
Set<String> positionNames = users.stream()
.map(User::getTitle)
.filter(Objects::nonNull)
.filter(s -> !s.isEmpty())
.collect(Collectors.toSet());
答案 1 :(得分:3)
users.stream().map(User::getTitle).distinct().filter(s -> !s.isEmpty()).collect(Collectors.toList());