Java Stream 过滤不包含特定项目列表作为属性的对象列表

MA-*_*Dev 5 java stream

我有一个用户列表。

public class User {
private String UserID;
private String departmentId;
private String email;
}
Run Code Online (Sandbox Code Playgroud)

我有一个部门 ID 列表

List<String> departmentIdList = Arrays.asList("111", "2222");
Run Code Online (Sandbox Code Playgroud)

我需要过滤部门ID不在departmentIdList中的用户。根据上面的示例,我需要部门 ID 不等于 111 或 2222 的用户。

Noi*_*xes 8

List<User> users = new ArrayList<>();

List<String> departmentIdList = Arrays.asList("111", "2222");

List<User> usersNotInDepartments = users.stream()
        .filter(u -> !departmentIdList.contains(u.departmentId))
        .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

我建议您将 DepartmentIdList 设置为 Set 数据结构,因为它比查找列表的性能更高


30t*_*thh 5

users.stream().filter(
    u -> ! departmentIdList.contains(u.getDepartmentId())
).collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)