3 回答
TA贡献2065条经验 获得超14个赞
您的解决方案很好:
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
as进行初始化
this.precedingTasks = new ArrayList<>(); // to ensure it's not null;
无论如何,这里只是个人喜好。
TA贡献1909条经验 获得超7个赞
这是一个完整的例子,我把 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]
TA贡献1757条经验 获得超7个赞
我在我的案例中找到了正确的解决方案:
task.getPrecedingTasks().stream().map(Task::getName).forEach(this.precedingTasks::add);
谢谢,提示:)
添加回答
举报