Skip to content

Commit b76ceae

Browse files
Improve Java 8's Streams used to create image lists
Make use of collect method of the Java 8 Stream's API and Collectors.collectingAndThen(Collectors.toList(),Collections::unmodifiableList) to return unmodifiable lists, as Collectors.toUnmodifiableList() is only available on Java 10+. This replaces creation of ArrayLists wrapped in unmodifiable lists by Java 8's Stream API users, so the extractors and their helper classes. Co-authored-by: Isira Seneviratne <isirasen96@gmail.com>
1 parent 0bef5a6 commit b76ceae

5 files changed

Lines changed: 35 additions & 50 deletions

File tree

extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampChannelExtractor.java

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@
2727
import org.schabi.newpipe.extractor.stream.StreamInfoItemsCollector;
2828

2929
import java.io.IOException;
30-
import java.util.ArrayList;
3130
import java.util.Collections;
3231
import java.util.List;
3332
import java.util.Objects;
33+
import java.util.stream.Collectors;
3434
import java.util.stream.Stream;
3535

3636
import javax.annotation.Nonnull;
@@ -60,20 +60,14 @@ public List<Image> getBanners() throws ParsingException {
6060
.get(replaceHttpWithHttps(channelInfo.getString("bandcamp_url")))
6161
.responseBody();
6262

63-
final List<Image> imageList = new ArrayList<>();
64-
65-
Stream.of(Jsoup.parse(html).getElementById("customHeader"))
63+
return Stream.of(Jsoup.parse(html).getElementById("customHeader"))
6664
.filter(Objects::nonNull)
6765
.flatMap(element -> element.getElementsByTag("img").stream())
68-
.forEach(element -> {
69-
final String url = element.attr("src");
70-
if (!isNullOrEmpty(url)) {
71-
imageList.add(new Image(replaceHttpWithHttps(url),
72-
HEIGHT_UNKNOWN, WIDTH_UNKNOWN));
73-
}
74-
});
75-
76-
return Collections.unmodifiableList(imageList);
66+
.map(element -> element.attr("src"))
67+
.filter(url -> !isNullOrEmpty(url))
68+
.map(url -> new Image(replaceHttpWithHttps(url), HEIGHT_UNKNOWN, WIDTH_UNKNOWN))
69+
.collect(Collectors.collectingAndThen(Collectors.toList(),
70+
Collections::unmodifiableList));
7771

7872
} catch (final IOException | ReCaptchaException e) {
7973
throw new ParsingException("Could not download artist web site", e);

extractor/src/main/java/org/schabi/newpipe/extractor/services/bandcamp/extractors/BandcampExtractorHelper.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@
2020
import java.time.DateTimeException;
2121
import java.time.ZonedDateTime;
2222
import java.time.format.DateTimeFormatter;
23-
import java.util.ArrayList;
2423
import java.util.Arrays;
2524
import java.util.Collections;
2625
import java.util.List;
2726
import java.util.Locale;
27+
import java.util.stream.Collectors;
2828

2929
import javax.annotation.Nonnull;
3030

@@ -288,12 +288,10 @@ public static List<Image> getImagesFromImageId(final long id, final boolean isAl
288288
*/
289289
@Nonnull
290290
private static List<Image> getImagesFromImageBaseUrl(@Nonnull final String baseUrl) {
291-
final List<Image> imageList = new ArrayList<>();
292-
IMAGE_URL_SUFFIXES_AND_RESOLUTIONS.stream()
293-
.forEach(imageSuffix -> imageList.add(
294-
new Image(baseUrl + imageSuffix.getSuffix(), imageSuffix.getHeight(),
295-
imageSuffix.getWidth())));
296-
297-
return Collections.unmodifiableList(imageList);
291+
return IMAGE_URL_SUFFIXES_AND_RESOLUTIONS.stream()
292+
.map(imageSuffix -> new Image(baseUrl + imageSuffix.getSuffix(),
293+
imageSuffix.getHeight(), imageSuffix.getWidth()))
294+
.collect(Collectors.collectingAndThen(Collectors.toList(),
295+
Collections::unmodifiableList));
298296
}
299297
}

extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/PeertubeParsingHelper.java

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@
1717
import java.time.OffsetDateTime;
1818
import java.time.ZoneOffset;
1919
import java.time.format.DateTimeParseException;
20-
import java.util.ArrayList;
2120
import java.util.Collections;
2221
import java.util.List;
22+
import java.util.stream.Collectors;
2323

2424
import static org.schabi.newpipe.extractor.Image.HEIGHT_UNKNOWN;
2525
import static org.schabi.newpipe.extractor.Image.WIDTH_UNKNOWN;
@@ -248,20 +248,13 @@ private static List<Image> getImagesFromAvatarsOrBanners(
248248
private static List<Image> getImagesFromAvatarOrBannerArray(
249249
@Nonnull final String baseUrl,
250250
@Nonnull final JsonArray avatarsOrBannersArray) {
251-
final List<Image> imageList = new ArrayList<>();
252-
avatarsOrBannersArray.stream()
251+
return avatarsOrBannersArray.stream()
253252
.filter(JsonObject.class::isInstance)
254253
.map(JsonObject.class::cast)
255-
.forEach(image -> {
256-
final String path = image.getString("path");
257-
if (isNullOrEmpty(path)) {
258-
return;
259-
}
260-
261-
imageList.add(new Image(baseUrl + path, HEIGHT_UNKNOWN,
262-
image.getInt("width", WIDTH_UNKNOWN)));
263-
});
264-
265-
return Collections.unmodifiableList(imageList);
254+
.filter(image -> !isNullOrEmpty(image.getString("path")))
255+
.map(image -> new Image(baseUrl + image.getString("path"), HEIGHT_UNKNOWN,
256+
image.getInt("width", WIDTH_UNKNOWN)))
257+
.collect(Collectors.collectingAndThen(Collectors.toList(),
258+
Collections::unmodifiableList));
266259
}
267260
}

extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeParsingHelper.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@
7474
import java.util.Optional;
7575
import java.util.Random;
7676
import java.util.regex.Pattern;
77+
import java.util.stream.Collectors;
7778
import java.util.stream.Stream;
7879

7980
import javax.annotation.Nonnull;
@@ -1088,15 +1089,15 @@ public static List<Image> getThumbnailsFromInfoItem(@Nonnull final JsonObject in
10881089
@Nonnull
10891090
public static List<Image> getImagesFromThumbnailsArray(
10901091
@Nonnull final JsonArray thumbnails) {
1091-
final List<Image> imageList = new ArrayList<>();
1092-
thumbnails.stream()
1092+
return thumbnails.stream()
10931093
.filter(JsonObject.class::isInstance)
10941094
.map(JsonObject.class::cast)
1095-
.forEach(thumbnail -> imageList.add(
1096-
new Image(fixThumbnailUrl(thumbnail.getString("url")),
1097-
thumbnail.getInt("height", Image.HEIGHT_UNKNOWN),
1098-
thumbnail.getInt("width", Image.WIDTH_UNKNOWN))));
1099-
return Collections.unmodifiableList(imageList);
1095+
.filter(thumbnail -> !isNullOrEmpty(thumbnail.getString("url")))
1096+
.map(thumbnail -> new Image(fixThumbnailUrl(thumbnail.getString("url")),
1097+
thumbnail.getInt("height", Image.HEIGHT_UNKNOWN),
1098+
thumbnail.getInt("width", Image.WIDTH_UNKNOWN)))
1099+
.collect(Collectors.collectingAndThen(Collectors.toList(),
1100+
Collections::unmodifiableList));
11001101
}
11011102

11021103
@Nonnull

extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeMixPlaylistExtractor.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,13 @@
3939
import java.io.IOException;
4040
import java.net.URL;
4141
import java.nio.charset.StandardCharsets;
42-
import java.util.ArrayList;
4342
import java.util.Arrays;
4443
import java.util.Collections;
4544
import java.util.HashMap;
4645
import java.util.List;
4746
import java.util.Map;
4847
import java.util.Objects;
48+
import java.util.stream.Collectors;
4949

5050
import javax.annotation.Nonnull;
5151
import javax.annotation.Nullable;
@@ -264,14 +264,13 @@ private List<Image> getThumbnailsFromPlaylistId(@Nonnull final String playlistId
264264
}
265265

266266
@Nonnull
267-
private List<Image> getThumbnailsFromVideoId(final String videoId) {
267+
private List<Image> getThumbnailsFromVideoId(@Nonnull final String videoId) {
268268
final String baseUrl = "https://i.ytimg.com/vi/" + videoId + "/";
269-
final List<Image> imageList = new ArrayList<>(IMAGE_URL_SUFFIXES_AND_RESOLUTIONS.size());
270-
IMAGE_URL_SUFFIXES_AND_RESOLUTIONS.stream()
271-
.forEach(imageSuffix -> imageList.add(
272-
new Image(baseUrl + imageSuffix.getSuffix(), imageSuffix.getHeight(),
273-
imageSuffix.getWidth())));
274-
return Collections.unmodifiableList(imageList);
269+
return IMAGE_URL_SUFFIXES_AND_RESOLUTIONS.stream()
270+
.map(imageSuffix -> new Image(baseUrl + imageSuffix.getSuffix(),
271+
imageSuffix.getHeight(), imageSuffix.getWidth()))
272+
.collect(Collectors.collectingAndThen(Collectors.toList(),
273+
Collections::unmodifiableList));
275274
}
276275

277276
@Nonnull

0 commit comments

Comments
 (0)