这看起来很简单,但我想要做的就是从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;
}
答案 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
:
答案 2 :(得分:0)
似乎您希望将返回的字符串传递给另一个接受单个字符串的方法(而不是数组或字符串列表)。如果是这样,您可能不需要getEachEmployeeInstance()
方法:
for(Employee employee : employees) {
anotherMethod(employee.getFirstname() /* ... */);
}