Преобразование списка в новый объект Map с использованием лямбда-выражения - PullRequest
0 голосов
/ 10 февраля 2020

Java 8 до:

final List<SimpleTimerTask> simpleTimerTaskList; // suppose a set of SimpleTimerTask in list
final Map<String, SimpleTTExecutorEntry> result = new HashMap<String, SimpleTTExecutorEntry>();
for (SimpleTimerTask stt: simpleTimerTaskList) {
    SimpleTTExecutorEntry sttEntry = new SimpleTTExecutorEntry(stt, SimpleTimerTaskStatus.Ready, time);
    result.put(stt.getTaskId(), sttEntry);
}

Лямбда:

final Map<String, SimpleTTExecutorEntry> result = simpleTimerTaskList.stream().collect(
Collectors.toMap(
    SimpleTimerTask::getTaskId, SimpleTTExecutorEntry -> 
            new SimpleTTExecutorEntry(SimpleTimerTask, <- error here ->
            SimpleTimerTaskStatus.Ready, time)
));

Хотите преобразовать for-l oop в Lamdba, но SimpleTimer имеет объект не найден ошибка в подрядчик SimpleTTExecutorEntry, можете ли вы помочь посоветовать, как это исправить, спасибо

Ответы [ 2 ]

0 голосов
/ 11 февраля 2020

Это работает. Большое спасибо.

Однако я до сих пор не понимаю, почему они должны использовать одинаковые SimpleTimerTask -> для getTaskId() и new SimpleTTExecutorEntry(...), Можете ли вы помочь посоветовать, спасибо

Collectors.toMap(

SimpleTimerTask -> SimpleTimerTask.getTaskId(),

SimpleTimerTask -> new SimpleTTExecutorEntry(SimpleTimerTask, SimpleTimerTaskStatus.Ready, time))
0 голосов
/ 10 февраля 2020

Я только что сделал пример, просто позаботьтесь о методе map (). Вам нужно использовать ваши геттеры, я только что сделал "taskId" publi c. Надеюсь, это поможет:

private void map(){
    List<SimpleTimerTask> simpleTimerTaskList = new ArrayList<>();

    Map<String, SimpleTTExecutorEntry> result = 
        simpleTimerTaskList.stream().collect(
            Collectors.toMap(task -> task.taskId, task -> new SimpleTTExecutorEntry(task, "Status", "time")));
}
// objects similar to yours with the same kind of wrapping
static class SimpleTTExecutorEntry {
    private SimpleTimerTask SimpleTimerTask;
    private Object status;
    private Object time;

    public SimpleTTExecutorEntry(SimpleTimerTask simpleTimerTask, Object status, Object time) {
        SimpleTimerTask = simpleTimerTask;
        this.status = status;
        this.time = time;
    }
}

static class SimpleTimerTask {
    public String taskId;
}

Удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...