Getters和Setters使用返回的数据

时间:2016-02-22 12:53:59

标签: java oop getter-setter

这听起来像是一个新手问题,但我仍在围绕核心Java概念开发我的知识。

我将以一个例子提出问题。

假设我有这些类,一个简单的getter setter。

第一个表示第二个列表。

public class JobList {

private List<Job> jobs;

public List<Job> getJobs() {
    return jobs;
}

public void setJobs(List<Job> jobs) {
    this.jobs = jobs;
}

然后。

public class Job {

private String name;
private String url;

public void setName(String name) {
    this.name = name;
}

public String getName() {
    return name;
}

public void setUrl(String url) {
    this.url = url;
}

public String getUrl() {
    return url;
}

在另一个类中,我有方法做各种事情来返回包含我想要在getter和setter中的值的列表。

public List someMethod() {
//Loop through stuff to get a list of names
}
return nameList;
}

然后说......

public List someOtherMethod() {
//Loop through stuff to get a list of urls
}
return urlist;
}

我希望能够使用getter和setter检索这两种方法的信息,以便在应用程序的其他地方使用。但是我不确定如何在不将getter和setter放在与上述两种方法相同的类中的情况下如何做到这一点。

我需要这样做,还是有另一种更简单的方法/标准做法来做到这一点?

2 个答案:

答案 0 :(得分:1)

你是说这个吗?

Set<String> collectNames(JobList jobList) {
    Set<String> names = new HashSet<>();
    for(Job job : jobList.getJobs()) {
        names.add(job.getName());
    }
    return names;
}

此方法从JobList中收集所有唯一的(因此Set而不是List)名称。

编辑:

从main方法中使用此方法来打印所有作业名称,执行以下操作:

public static void main(String[] args) {
    JobList jobList = new jobList();
    // TODO: populate jobList with an array of Jobs
    Set<String> names = collectNames(jobList);
    // below implicitly AbstractCollection.toString() is called which returns a comma-separated representation of the contents
    System.out.println(names);
}

编辑2:

该方法返回Set。您可以迭代Set以依次获取其所有元素:

// ...
Set<String> names = collectNames(jobList);
Iterator<String> it = names.iterator();
while(it.hasNext()) {
    String name = it.next();
    System.out.println(name);
}

答案 1 :(得分:0)

一般来说,我是Adriaan的第二个答案,但如果可能的话,我会利用Java 8的功能:

Set<String> collectNames(JobList jobList) {
    return jobList.getJobs().stream()
           .map(Job::getName)
           .collect(Collectors.toSet());
}