#java #lambda
#java #лямбда
Вопрос:
Я хочу изменить feeAmount и message, используя цикл for, который я сделал, но я хочу использовать Lambda (по умолчанию все переменные являются конечными в Lambda).
gridFeeEntity.stream().forEach(entity -> {
if ("T".equals(entity.getType())){
feeAmount = 1;
}else if ("P".equals(entity.getType())) {
feeAmount = 2;
} else {
message = "not Supported";
}
});
Ответ №1:
В дополнение к ответу Тима я бы предложил рассмотреть возможность инвертирования вашей логики. (Обратите внимание, что ваш бит «сообщения» почти наверняка должен быть исключением.)
int feeIncrease = gridFeeEntities.stream()
.map(GridFeeEntity::getType)
.mapToInt(FeeList::forType)
.sum();
feeAmount = feeIncrease;
Комментарии:
1. .. и
FeeList#forType
должен возвращать целое число при условии, что тип объекта абстрагирует основную логику.
Ответ №2:
Потоки не идеальны для каждого варианта использования, и я бы предпочел использовать здесь простой расширенный for
цикл:
for (GridFeeEntity entity : gridFeeEntity) {
if ("T".equals(entity.getType())) {
feeAmount = 1;
}
else if ("P".equals(entity.getType())) {
feeAmount = 2;
}
else {
message = "not Supported";
}
}
Это чисто, легко читается и все равно должно работать примерно так же, как stream, особенно для небольших коллекций.
Комментарии:
1. Да, в конце концов я так и сделал.