从ArrayList返回项目

时间:2014-07-12 01:02:57

标签: java

这看起来很简单,但我想要做的就是从ArrayList返回项目作为字符串 我使用以下代码返回它们,但它只返回列表中的第一项,我希望它能单独返回每个项目。不知道我在做什么,我有它工作,但意外删除。

public String getEachEmployeeInstance() {


        for (Employee e : employees)
        {  

             return e.getFirstName() +"\t" + e.getLastName() +"\t"+ e.getEmployeeIDString()+"\t" + e.getPunchIn() +"\t"+ e.getPunchOut() +"\t"+ e.getDailyHours() +"\t"+ e.getWeeklyHours();  
        }         
        return null;            
    }

3 个答案:

答案 0 :(得分:2)

看起来您正在寻找与Python yield关键字相当的Java。 Java内置了此功能。

当你说return时,你告诉Java退出该函数并返回当前元素。循环的其余部分不会运行。

如果您真的想要Java中的生成器功能,您可能需要考虑查看this answer中提到的库。

对于这个特定的用例,只需在集合中维护Iterator或索引就足够了,并在每次调用函数时引用该对象。

Iterator<Employee> myEmployeeIterator = null;

public String getEachEmployeeInstance() {
    if (myEmployeeIterator == null) 
        myEmployeeIterator = employees.iterator();

    if (myEmployeeIterator.hasNext()) {
        Employee e = myEmployeeIterator.next();
        return e.getFirstName() +"\t" + e.getLastName() +"\t"+ e.getEmployeeIDString()+"\t" + e.getPunchIn() +"\t"+ e.getPunchOut() +"\t"+ e.getDailyHours() +"\t"+ e.getWeeklyHours();  
    }

    return null;            
}

另一种可能性是OP实际上只是希望循环的连接输出(由换行符分隔)显示在他的GUI组件中。使用StringBuilder可以轻松实现这一目标。

public String getEachEmployeeInstance() {

    StringBuilder sb = new StringBuilder();
    for (Employee e : employees)
    {  
        sb.append(e.getFirstName() +"\t" + e.getLastName() +"\t"+ e.getEmployeeIDString()+"\t" + e.getPunchIn() +"\t"+ e.getPunchOut() +"\t"+ e.getDailyHours() +"\t"+ e.getWeeklyHours());  
        sb.append("\n");
    }         
    return sb.toString();            
}

答案 1 :(得分:0)

它只将第一个元素作为字符串返回,因为你将return作为for循环中的第一个语句。

如果要返回字符串列表。您需要执行以下操作:

public List<String> getEachEmployeeInstance() {
    List<String> employeeList = new ArrayList<>;

    for (Employee e : employees)
    {  
         employeeList.add( e.getFirstName() +"\t" + e.getLastName() +"\t"+ e.getEmployeeIDString()+"\t" + e.getPunchIn() +"\t"+ e.getPunchOut() +"\t"+ e.getDailyHours() +"\t"+ e.getWeeklyHours());  
    }         
    return employeeList;            
}

另一方面,如果您想要yield返回,可以使用此项目中的YieldUtils

https://code.google.com/p/java-yield/

答案 2 :(得分:0)

似乎您希望将返回的字符串传递给另一个接受单个字符串的方法(而不是数组或字符串列表)。如果是这样,您可能不需要getEachEmployeeInstance()方法:

for(Employee employee : employees) {
    anotherMethod(employee.getFirstname() /* ... */);
}