我正在尝试从包含特定字符串的s3的关键对象列表中过滤掉。 这是我的方法:
public List<String>getBucketList3(String filterStr) {
List<String> lst = new ArrayList<>();
ListObjectsRequest listObjectsRequest = new ListObjectsRequest()
.withBucketName(bucketName);
ObjectListing objectListing = s3client.listObjects(listObjectsRequest);
for (; ; ) {
List<S3ObjectSummary> summaries = objectListing.getObjectSummaries();
if (summaries.size() < 1) {
break;
}
summaries.forEach(s -> lst.add(s.getKey()));
objectListing = s3client.listNextBatchOfObjects(objectListing);
}
return lst;
}
我试图仅过滤掉包含'filterStr'的关键对象,并将其添加到我的'lst'数组列表字符串中。 我试图使用java 8的stream()来完成它,但是我正在努力解决它。
答案 0 :(得分:2)
List<String> list = lst.stream()
.filter(s -> s.contains(filterStr))
.collect(Collectors.toList());
如果这是适合您的情况的谓词,它可能会那样工作。
答案 1 :(得分:1)
您可以尝试以下操作:
ObjectListing objectListing = s3client.listObjects(listObjectsRequest);
List<S3ObjectSummary> summaries = objectListing.getObjectSummaries();
List<String> lst = new ArrayList<>();
do {
lst.addAll(summaries.stream()
.map(S3ObjectSummary::getKey) // creates a string stream
.filter(s -> s.contains(filterStr)) // filters all values containing filterStr
.collect(Collectors.toList()));
objectListing = s3client.listNextBatchOfObjects(objectListing);
summaries = objectListing.getObjectSummaries();
} while (!summaries.isEmpty());