#java #arrays #filter #match
#java #массивы #Фильтр #совпадение
Вопрос:
Я пытаюсь отфильтровать значение идентификатора, которое соответствует определенной переменной, и вернуть идентификатор
result = {
"drives": [{
"id": "0AEz3mOk9PVA",
"name": "Dev2020-10"
}, {
"id": "0AMEH9PVA",
"name": "Dev2020-11"
}, {
"id": "0AAPUk9PVA",
"name": "Dev2020-12"
}
]
имя_фоЛьда = Dev2020-12
код:
if(result.toString().contains(folderName)) {
return resu<
} else {
// ...
}
Мне нужно сопоставить значение в результате и вернуть только идентификатор соответствующего имени диска.
ожидаемый результат:
«0AAPUk9PVA»
Как я могу этого добиться
Комментарии:
1. Что такое
result
? Карта или JSONObject?2. На самом деле это список массивов
3. каков тип результирующего объекта? если массив, каковы типы содержащихся в нем объектов? из java 8 вы можете использовать stream () и filter ()
4. ArrayList каких объектов?
5. добавьте больше кода и контекста к вашему вопросу
Ответ №1:
Как только result
появится com.google.api.services.drive.model.DriveList
, вы можете попробовать следующее:
import com.google.api.services.drive.model.Drive;
Optional<String> folderNameDriveId = result.getDrives().stream()
.filter(drive -> folderName.equals(drive.getName()))
.map(Drive::getId)
.findFirst();
Комментарии:
1. Это не позволяет мне получить идентификатор диска. Ошибка: тип Drive не определяет getId (диск), который применим здесь
2. Вы импортируете правильный класс диска? Обновил мой ответ с помощью import
Ответ №2:
result.stream().filter(i -> i.get("name").equals(foderName)).findAny().orElse(null)
проверка внутри вызова фильтра будет зависеть от типа объектов, которые у вас есть в вашем ArrayList