java - 如何将以下代码片段转换为 Java 8 功能?

标签 java java-8

我有 POJO 员工,其技能列表如下所示:-

public class Skills {

    private String language;
    private double versions;

    public String getLanguage() {
        return language;
    }

    public void setLanguage(String language) {
        this.language = language;
    }

    public double getVersions() {
        return versions;
    }

    public void setVersions(double versions) {
        this.versions = versions;
    }
}

import java.util.List;

public class Employee {

    private long empId;
    private String empName;
    private String empAddress;
    private double salary;
    private List<Skills> skills;

    public List<Skills> getSkills() {
        return skills;
    }

    public void setSkills(List<Skills> skills) {
        this.skills = skills;
    }

    public long getEmpId() {
        return empId;
    }

    public void setEmpId(long empId) {
        this.empId = empId;
    }

    public String getEmpName() {
        return empName;
    }

    public void setEmpName(String empName) {
        this.empName = empName;
    }

    public String getEmpAddress() {
        return empAddress;
    }

    public void setEmpAddress(String empAddress) {
        this.empAddress = empAddress;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    @Override
    public String toString() {
        return "Employee{" +
                "empId=" + empId +
                ", empName='" + empName + '\'' +
                ", empAddress='" + empAddress + '\'' +
                ", salary=" + salary +
                '}';
    }

    public Employee(long empId, String empName, String empAddress, double salary, List<Skills> skills) {
        this.empId = empId;
        this.empName = empName;
        this.empAddress = empAddress;
        this.salary = salary;
        this.skills = skills;
    }
}

我正在尝试执行以下操作:-

 List<Employee> javaEmpList = new ArrayList<>();

        for (Employee emp : empList) {

            for (Skills skill : emp.getSkills()) {

                if (skill.getLanguage().equalsIgnoreCase("Java")) {
                    javaEmpList.add(emp);
                }
            }
        }

我正在尝试使用 Java 8 功能来转换此实现。有人可以帮我吗?我是 Java 8 的新手。我尝试使用 streams + filter + map 组合,但我无法获得结果。

最佳答案

你需要的是StreamList<Employee> , 使用 filter()只保留 Employee具有 Java 技能,并且 collect()过滤后的 Employee进入新的List .

请注意,这与您的嵌套循环的行为并不完全相同,但我假设您真的不想添加相同的 Employee多次输出 List .

List<Employee> javaEmpList =
    empList.stream()
           .filter(emp -> emp.getSkills()
                             .stream()
                             .anyMatch(skill -> skill.getLanguage().equalsIgnoreCase("Java")))
           .collect(Collectors.toList());

关于java - 如何将以下代码片段转换为 Java 8 功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58058067/

相关文章:

java - 如何从禁用菜单键的按钮打开菜单

java - 在java流中按日期聚合数据

Java 8 添加对象列表的多个属性的值

java - 从包含姓名和地址的文本 block 中提取地址/联系方式?

java - org.hibernate.NonUniqueObjectException。到底是什么原因呢?

java - 尝试将 EditText 表单提交到我的电子邮件时出错?没有应用程序可以执行此操作?

java - 在服务器中隐藏 key 或外部化应用程序属性

java - 获取深度对象中的每个对象

java - Java 8中 "functional interface"的精确定义

java.lang.UnsupportedOperationException JavaFX ArrayList<String> 到 ObservableList<StringProperty>