首页 > 解决方案 > 使用java流替换复杂代码

问题描述

我有下面的代码块,我正在尝试使用 java 流进行转换。

for(Emp emp:empList){
            if(combinedData.getOrg()==null){
                combinedData.setOrg(emp.getCompany());
            }
            combinedData.addToList(emp.getWorkLog());
            if(combinedData.getRawData()!=null){
                combinedData.setRawData(combinedData.getRawData()+emp.getData());
            }
            else{
                combinedData.setRawData(emp.getData());
            }
        }

我面临的挑战是我只需要设置一个 Org 并且我需要附加到现有的 rawdata。我知道可以通过减少使用流的行数轻松完成。

完整代码如下

public class Main {
    public static void main(String[] args) {
        List<Emp> empList = Arrays.asList(
                new Emp("x1","as2112","a"),
                new Emp("x1","as2122","b"),
                new Emp("x1","as2422","c"),
                new Emp("x1","as2423","d"));
        CombinedData combinedData = new CombinedData();
        for(Emp emp:empList){
            if(combinedData.getOrg()==null){
                combinedData.setOrg(emp.getCompany());
            }
            combinedData.addToList(emp.getWorkLog());
            if(combinedData.getRawData()!=null){
                combinedData.setRawData(combinedData.getRawData()+emp.getData());
            }
            else{
                combinedData.setRawData(emp.getData());
            }
        }

}

}
class Emp{
    private String company;
    private String workLog;
    private String data;

    public Emp(
            String company,
            String workLog,
            String data) {
        this.company = company;
        this.workLog = workLog;
        this.data = data;
    }

    public String getCompany() {
        return company;
    }

    public void setCompany(String company) {
        this.company = company;
    }

    public String getWorkLog() {
        return workLog;
    }

    public void setWorkLog(String workLog) {
        this.workLog = workLog;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }
}

class CombinedData{
    private String org;
    private List<String> worklogList;
    private String rawData;

    public String getOrg() {
        return org;
    }

    public void setOrg(String org) {
        this.org = org;
    }

    public List<String> getWorklogList() {
        return worklogList;
    }

    public void setWorklogList(List<String> worklogList) {
        this.worklogList = worklogList;
    }

    public String getRawData() {
        return rawData;
    }

    public void setRawData(String rawData) {
        this.rawData = rawData;
    }
    public void addToList(String worklog){
        this.worklogList.add(worklog);
    }
}

标签: javajakarta-eejava-8java-stream

解决方案


我知道可以通过减少使用流的行数轻松完成。

好吧,这不是真的。我只能建议您将方法添加到 CombinedData

void add(Emp emp) {
    if(getOrg()==null){
        setOrg(emp.getCompany());
    }
    addToList(emp.getWorkLog());
    if(getRawData()!=null){
        setRawData(getRawData()+emp.getData());
    }
    else{
        setRawData(emp.getData());
    }
}

然后将其应用于流

CombinedData combinedData = new CombinedData();
empList.forEach(combinedData::add);

推荐阅读