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.precedingTasksas進行初始化
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);
謝謝,提示:)
添加回答
舉報
