[英]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);
問題中的代碼可以重構為使用Optional
、 Stream
和flatMap
而不是嵌套循環
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.