cra*_*157 3 java swing stream jprogressbar optional
当我尝试在 JProgressBar 上设置值时,我收到以下错误。
"Optional 不能转换为 Int"
有人可以建议任何解决方法/解决方案吗?
public GUI(){
initComponents();
tL = new TasksToDo();
jProgressBar1.setValue(tL.retrieveTotalHours());// [Where my error occurs]}
}
Run Code Online (Sandbox Code Playgroud)
从 TaskToDo 类中,最初我将其设置为 ArrayList 但警告说需要切换到 Optional:
public class TasksToDo {
public static ArrayList<Task> taskList;
public TasksToDo(){
taskList = new ArrayList<Task>();
taskList.add(new Task(0,"Whitepaper", "Write first draft of Whitepaper", 7));
taskList.add(new Task(1,"Create Database Structure", "Plan required fields and tables", 1));
taskList.add(new Task(2,"Setup ODBC Connections", "Create the ODBC Connections between SVR1 to DEV-SVR", 2));
}
public void addTask (int taskId, String taskTitle, String taskDescription, int taskHours){}
public ArrayList<Task> retrieveTask(){
return taskList;
}
public Optional<Integer> retrieveTotalHours(){
return taskList.stream().map(e -> e.getTaskHours()).reduce(Integer::sum);
}
}
Run Code Online (Sandbox Code Playgroud)
您必须像这样打开可选项并获取其中的值。否则,你不能指定一个Optional地方int是必要的。
tL.retrieveTotalHours().orElse(0);
Run Code Online (Sandbox Code Playgroud)
Optional 意味着该值不需要存在。它基本上是在那里强制调用者明确决定当值不存在时要做什么。在您的情况下,您可以指定一个默认值:
jProgressBar1.setValue(tL.retrieveTotalHours().orElse(0));
Run Code Online (Sandbox Code Playgroud)
但是,您的retrieveTotalHours方法可能不应该首先返回 Optional。当流为空时Stream.reduce返回Optional.empty(),但在您的情况下,它可能应该0在任务列表为空时返回。所以你可以这样做:
public int retrieveTotalHours(){
return taskList.stream().map(e -> e.getTaskHours()).reduce(0, Integer::sum);
}
Run Code Online (Sandbox Code Playgroud)
(0参数是标识,当流为空时返回。)
甚至:
public int retrieveTotalHours(){
return taskList.stream().mapToInt(e -> e.getTaskHours()).sum();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6096 次 |
| 最近记录: |