#java #java-8 #maps
#java #java-8 #Карты
Вопрос:
У меня короткий вопрос. Как я могу получить значение из необязательной карты?
В foreach (fuelTypesFromDriveTrain.forEach …) Я хочу извлечь значения из карты:
- Строковое значение = fuelTypesMap.get(fuelTypeFromDriveTrain.GetType());
Но я не знаю, как получить к ним доступ, и я думаю, причина в том, что моя карта является необязательной. Есть идеи?
// the map
final Optional<Map<String, String>> fuelTypesMap = extractAttributeElementValueMap(fuelTypeAttributes);
final Set<FuelType> fuelTypesFromDriveTrain = getFuelTypesFromDriveTrain(driveTrain);
if (refueling.getTypes().isEmpty() amp;amp; !fuelTypesFromDriveTrain.isEmpty()) {
Set<String> fuelTypesKeys = new HashSet<>();
fuelTypesMap.map(Map::keySet)
.map(Collection::stream)
.orElseGet(Stream::empty)
.forEach(fuelTypeKey -> fuelTypesKeys.add(fuelTypeKey));
fuelTypesFromDriveTrain.forEach(fuelTypeFromDriveTrain -> {
if(fuelTypesKeys.contains(fuelTypeFromDriveTrain.getType())) {
String value = fuelTypesMap.get(fuelTypeFromDriveTrain.getType());
// I cannot obtain the value from the map
refueling.getTypes().add(value);
}
});
}
Комментарии:
1. Если вы знаете, что она не пуста, вы можете использовать
get
, чтобы просто получить карту. В противном случае вы можете использовать.map(m -> m.get(key))
для полученияOptional<String>
2. @user Спасибо!
3. Вы также можете легко работать с
Map<String, String>> definitiveFuelTypeMap = fuelTypesMap.orElse(Collections.emptyMap());
ним, если не хотите его изменять. Вопрос, который нужно задать себе — каким должно быть поведение, если необязательный элемент отсутствует, и далее, если ключ отсутствует на карте.
Ответ №1:
Проверьте приведенный ниже код
fuelTypesFromDriveTrain.forEach(fuelTypeFromDriveTrain -> {
fuelTypesMap.map(dataMap->dataMap.get(fuelTypeFromDriveTrain.getType()))
.ifPresent(value->refueling.getTypes().add(value));
});