Преобразование кода из HashMap в ArrayList - PullRequest
3 голосов
/ 29 марта 2020

Я новичок в java и хотел бы узнать, как можно преобразовать следующий код из использования HashMap с именем floorsMap в использование ArrayList с именем floorsArray вместо.

void randomizeQueues(String flag) {
    double num = (flag.equals("enforce")) ? 0.99 : Math.random();
    if (num > 0.5)
        floorsMap.values().forEach(Floor::randomizeDestinations);
}

1 Ответ

4 голосов
/ 29 марта 2020

forEach - терминальная операция; ничего не возвращает; поэтому вызов метода, который не имеет побочных эффектов, является бесполезной операцией.

Я думаю, вы ищете серию операций, которые преобразуют, а затем свердают результаты в новый тип коллекции. Для этого используется потоковый API:

List<Floor> randomizedFloors = floorsMap.values().stream()
    .map(Floor::randomizeDestinations)
    .collect(Collectors.toList());

РЕДАКТИРОВАТЬ:

Возможно randomizeDestinations рандомизирует 'на месте' и возвращает void. В этом случае вы не можете сохранить карту нетронутой, а затем иметь список со случайными адресатами, если у вас нет способа клонировать объект «Пол», который вы должны явно создать. Вы можете сделать:

List<Floor> randomizedFloors = floorsMap.values().stream().map(floor -> {
    Floor clone = floor.makeACopy(); // you must write this
    clone.randomizeDestinations();
    return clone;
}).collect(Collectors.toList());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...