Необязательно <Integer>не может быть преобразовано в Int (для использования на индикаторе прогресса GUI) - PullRequest
0 голосов
/ 21 ноября 2018

Я получаю сообщение об ошибке ниже, когда пытаюсь установить значение на JProgressBar.

"Необязательно, невозможно преобразовать в Int"

Может кто-нибудь посоветоватьОбходные пути / Решение ??

public GUI(){
    initComponents();
    tL = new TasksToDo();
    jProgressBar1.setValue(tL.retrieveTotalHours());// [Where my error occurs]}
}  

И из класса TaskToDo, первоначально я установил это на ArrayList, но в предупреждениях говорилось, что необходимо переключиться на Необязательный:

  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);
    }
}

Ответы [ 4 ]

0 голосов
/ 21 ноября 2018

Если вас интересует только количество часов, вам не нужен дополнительный и он может упростить его:

public int retrieveTotalHours()
{
  return taskList.stream().mapToInt(e -> e.getTaskHours()).sum();
}
0 голосов
/ 21 ноября 2018

Ну, в принципе, Optional<Integer> не совместимо с назначением int.

Но Integer есть (после распаковки) ... поэтому измените:

jProgressBar1.setValue(tL.retrieveTotalHours());

jProgressBar1.setValue(tL.retrieveTotalHours().orElse(0));

Обратите внимание, что вы должны предоставить целочисленное значение при вызове setValue.Ноль или «ничто» не допускается.

0 голосов
/ 21 ноября 2018

Необязательный означает, что значение не должно быть там.Это в основном там, чтобы заставить вызывающего явным образом решить, что делать, когда значение не существует.В вашем случае вы можете указать значение по умолчанию:

jProgressBar1.setValue(tL.retrieveTotalHours().orElse(0));

Однако ваш метод retrieveTotalHours, вероятно, не должен возвращать Optional в первую очередь.Stream.reduce возвращает Optional.empty(), когда поток пуст, но в вашем случае он, вероятно, должен возвращать 0, когда список задач пуст.Таким образом, вы можете сделать:

public int retrieveTotalHours(){
    return taskList.stream().map(e -> e.getTaskHours()).reduce(0, Integer::sum);
}

(Аргумент 0 - это идентификатор, который возвращается, когда поток пуст.)

или даже:

public int retrieveTotalHours(){
    return taskList.stream().mapToInt(e -> e.getTaskHours()).sum();
}
0 голосов
/ 21 ноября 2018

Вы должны развернуть опциональное и взять значение в нем, как это.В противном случае вы не можете назначить Optional, где требуется int.

tL.retrieveTotalHours().orElse(0);
...