java-8 - java 8流按列表过​​滤

标签 java-8

我需要按正式或非官方姓名列表中存在的姓名列表中的名字和姓氏过滤条件,并返回员工详细信息列表。 下面是 pojo 类

public class EmployeeDetails {
    private NameDetails nameDetails;

    public NameDetails getNameDetails() {
        return nameDetails;
    }
    public void setNameDetails(NameDetails nameDetails) {
        this.nameDetails = nameDetails;
    }
}

public class NameDetails {
    private List<Name> officalName;
    private List<Name> unOfficialName;
    public List<Name> getOfficalName() {
        return officalName;
    }
    public void setOfficalName(List<Name> offiicalName) {
        this.officalName = offiicalName;
    }
    public List<Name> getUnOfficialName() {
        return unOfficialName;
    }
    public void setUnOfficialName(List<Name> unOfficialName) {
        this.unOfficialName = unOfficialName;
    }
}

public class Name {
    private String firstName;
    private String lastName;
    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}

我尝试使用官方名称列表进行过滤,效果很好,但我也想过滤非官方名称中存在的名称。(或条件)

return employeeDetailList.stream().filter(employeeDetails->(employeeDetails.getNameDetails().getOffiicalName()).stream()
            .anyMatch(name-> (null!=name) && (firstName).equals(name.getFirstName()) && (lastName).equals(name.getLastName())))
            .collect(Collectors.toList());

帮我解决这个问题。谢谢

最佳答案

如果您无法覆盖equals/hashCode(如果可以的话会有更快的方法),那么:

  employeeDetailList             
         .stream()
         .filter(x -> Stream.concat(
                          x.getNameDetails().getOfficalName().stream(),
                          x.getNameDetails().getUnOfficialName().stream()
                      )
                     .anyMatch(y -> Objects.equals(y.getFirstName(), firstName) &&
                                    Objects.equals(y.getLastName(), lastName)))
         .collect(Collectors.toList());

关于java-8 - java 8流按列表过​​滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51907985/

相关文章:

asynchronous - 将异步任务的完成/进度监视器与 session 相关联

java - 检查重复列表 Java 8

Java8 Lambda 与匿名类

Java "Interface"类

java - 为什么 Spliterator<?> 将 NONNULL 定义为特征?

java - “java”命令有效,但 'javac' 无效

Java Streams 将 EnumMap 的 Map 转换为列表的 Map

java - 按多个属性对对象内的列表进行分组 : Java 8

java - 试图理解 Java8 中流的 distinct()

java - 使用第一个元素和附加集合进行列表初始化