Код из вопроса может быть реорганизован для использования Optional
, Stream
и flatMap
вместо вложенного l oop
private final AmazonEC2 ec2 = AmazonEC2ClientBuilder.defaultClient();
private Optional<String> findFirstEC2InstanceId() {
DescribeInstancesRequest request = new DescribeInstancesRequest();
return ec2.describeInstances(request).getReservations()
.stream()
.map(Reservation::getInstances)
.flatMap(Collection::stream)
.findFirst()
.map(Instance::getInstanceId);
}
Этот метод можно использовать следующим образом: выведите идентификатор экземпляра
findFirstEC2InstanceId().ifPresent(System.out::println);
Возвращение объекта Instance
вместо String
ID еще более гибко
private Optional<Instance> firstEC2Instance() {
DescribeInstancesRequest request = new DescribeInstancesRequest();
return ec2.describeInstances(request).getReservations()
.stream()
.map(Reservation::getInstances)
.flatMap(Collection::stream)
.findFirst();
}
Затем мы можем получить идентификатор экземпляра или любые другие данные, как показано ниже путь
firstEC2Instance().map(Instance::getInstanceId).ifPresent(System.out::println);