gpt4 book ai didi

java - 如何使用流 api 重写它

转载 作者:行者123 更新时间:2023-12-02 06:27:59 25 4
gpt4 key购买 nike

我不知道 Stream API 的所有功能。

我的任务是:我有一个带有 url 的字符串列表,还有另一个带有两种方法的自定义对象列表

String videoFromUrl(String url);


boolean support(String url);

我应该从第一个列表中选择一个 url,第二个列表的一个实例将支持该 url,然后返回转换后的 url

我的代码是:

@Override
protected String videoSourceFromDocument(final Document document) {
final List<String> hrefs = ...;
for (final String href : hrefs) {
final Optional<VideoDownloader> videoDownloader = this.videoDownloaders/*this is my second list*/
.stream()
.filter(dwnldr->dwnldr.support(href))
.findFirst();
if(videoDownloader.isPresent()){
return videoDownloader.get().videoFromUrl(href);
}
}
this.logger().warn("Url {} doesn't has video source",document.baseUri());
throw new IllegalArgumentException();
}

使用 Stream API 重写它是否更好?

最佳答案

当您需要两个内部循环以命令式方式执行某些操作时,使用流执行相同操作的解决方案通常是使用 flatMap:

protected String videoSourceFromDocument(final Document document) {
final List<String> hrefs = ...;
return hrefs.stream()
.flatMap(href -> this.videoDownloaders.stream()
.filter(d -> d.support(href))
.map(d -> d.videoFromUrl(href)))
.findFirst()
.orElseThrow(() -> {
this.logger().warn("Url {} doesn't has video source", document.baseUri());
return new IllegalArgumentException();
});
}

不过,我会删除日志,并将信息性消息放入 IllegalArgumentException 中。或者简单地返回 Optional<String> , 以便调用者可以决定在没有视频源时要做什么。

关于java - 如何使用流 api 重写它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50664610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com