Фильтрация значения идентификатора из массива с помощью java

#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