簡體   English   中英

如何使用 forEach() 方法通過 Java 8 迭代 AWS 預留 EC2 實例?

[英]How to use forEach() method for iterating AWS Reserved EC2 Instances by Java 8?

我找到了這段代碼來描述 AWS SDK for java 中的 ec2 實例。 我需要使用forEach()方法將此代碼片段轉換為 Java 8。 我知道如何使用forEach()方法迭代單個列表。 但是我正在努力處理這段代碼,因為它是嵌套的。

 DescribeInstancesRequest request = new DescribeInstancesRequest();
    while(!done) {
        DescribeInstancesResult response = ec2.describeInstances(request);

        for(Reservation reservation : response.getReservations()) {
            for(Instance instance : reservation.getInstances()) {
                    String instanceID = instance.getInstanceId(),
                    return instanceID;                    
            }
        }

我想要的是遍歷所有實例並獲取instanceID以供 java 8 進一步使用。有人能給我一個提示來滿足我的要求嗎? 將不勝感激。

這是使用java 8流的代碼

DescribeInstanceResult response = ec2.describeInstances(request);

String instanceId = response.getReservations()
                            .stream()
                            .flatMap(reservation -> reservation.getInstances()
                                                               .stream())
                            .findFirst()
                            .orElse(null);

問題中的代碼可以重構為使用OptionalStreamflatMap而不是嵌套循環

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);
}

該方法可以通過以下方式打印實例ID

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();
}

然后我們可以通過以下方式獲取實例 ID 或任何其他數據

firstEC2Instance().map(Instance::getInstanceId).ifPresent(System.out::println);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM