java - 如何将关键对象(s3)的列表(包含特定字符串)过滤到新列表中

标签 java amazon-web-services amazon-s3 arraylist java-stream

我正在尝试从包含特定字符串的 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() 来完成它,但我正在努力解决它。

最佳答案

你可以尝试这样的事情:

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

关于java - 如何将关键对象(s3)的列表(包含特定字符串)过滤到新列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55283182/

相关文章:

go - 从 golang 中的响应流创建 Imagemagick 对象

php - 上传到S3,如何判断是否传输成功?

java - Jetty MultipartFormDataInput 未调度

java - 使用 Environment.getExternalStorageDirectory().getAbsolutePath() 设置路径

python - Telegram bot webhook 和 amazon lambda

amazon-web-services - 如何在CloudFormation中指定myIP

amazon-s3 - 使用 Amazon Route 53 为 S3 存储桶设置 CNAME

java - Liferay portlet 和相对路径

Java:如何让 while 循环仅输出最后一行

symfony - Amazon ElasticBeanstalk 中的单实例 cronjob