Как отфильтровать (содержит определенную строку) список ключевых объектов (s3) в новый список - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь отфильтровать из списка ключевых объектов, взятых из 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» массива. Я пытаюсь использовать stream () из Java 8 для достижения этой цели, но я изо всех сил пытаюсь решить это.

Ответы [ 2 ]

2 голосов
/ 21 марта 2019
List<String> list = lst.stream()
        .filter(s -> s.contains(filterStr))
        .collect(Collectors.toList());

Это может работать так, если это правильный предикат для вашего случая.

1 голос
/ 21 марта 2019

Вы можете попробовать что-то вроде этого:

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