是否可以使用Lambda表达式或更好的方式写下for循环?
public TaskDTO convertToDTO(Task task) {
for (int i = 0; i < task.getPrecedingTasks().size(); i++)
this.precedingTasks.add(task.getPrecedingTasks().get(i).getName());
}
答案 0 :(得分:1)
这是一个完整的示例,我在其中放置了System.out.println ...,您应该使用this.precedingTasks.addAll(...
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
Task t1 = new Task("myTask", Arrays.asList(new Task("innerTask1"), new Task("innerTask2")));
System.out.println(t1.precedingTasks.stream().map(Task::getName).collect(Collectors.toList()));
}
static class Task {
private String name;
private List<Task> precedingTasks = new ArrayList<>();
public Task(String name) {
this.name = name;
}
public Task(String name, List<Task> precedingTasks) {
this.name = name;
this.precedingTasks = precedingTasks;
}
public String getName() {
return name;
}
public List<Task> getPrecedingTasks() {
return precedingTasks;
}
}
}
输出为
[innerTask1, innerTask2]
答案 1 :(得分:1)
您的解决方案很好:
task.getPrecedingTasks()。stream()。map(Task :: getName).forEach(this.precedingTasks :: add);
但是由于您只是在检索Task
,map
然后是collect
的列表,所以是:
this.precedingTasks = task.getPrecedingTasks().stream().map(Task::getName).collect(Collectors.toList());
它不是更直接,更容易理解吗?由于stream
在这里要做映射/转换然后收集。
也通过这种方式,您不需要将this.precedingTasks
初始化为
this.precedingTasks = new ArrayList<>(); // to ensure it's not null;
无论如何,这里只是个人喜好。
答案 2 :(得分:0)
我为自己的情况找到了正确的解决方案:
task.getPrecedingTasks().stream().map(Task::getName).forEach(this.precedingTasks::add);
感谢您的提示: