gpt4 book ai didi

java - 带有 Java 分页的迭代器设计模式

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:36:23 25 4
gpt4 key购买 nike

我正在尝试对以分页格式返回结果的 API 进行服务调用,并希望就此迭代器的设计模式提出建议。

我现在的情况是这样的

public class CustomIterator implements Iterator<Type> {

private List<Result> results;
private Service service;

private int index;
private int paginatedResultSize;
private int totalResultsSize;

public CustomIterator(Service service) {
this.service = service;
this.index = 0;
this.results = getResults(index);
this.totalResultsSize = this.results.totalResultsSize();
}

@Override
public boolean hasNext() {
if (index < totalResultsSize)
return true;
return false;
}

@Override
public Type next() {

if(index == paginatedResultSize) {
getResults(index);
}

return results[index++];

}

private List<Result> getResults(index) throws Exception {
this.results = service.makeServiceCall(index);
this.paginatedResultSize = this.results.size();
return this.results;
}

}

现在,我明白迭代器的目的通常只是迭代,但我也想将整个分页封装到一个单独的区域中,这样我的客户端类就可以调用类上的 .next() 并获取所有值无需了解内部分页细节。是否有一个干净的模式来完成这项工作?

有了这个,我遇到的第一个问题是服务调用抛出了一个已检查的异常,而 next() 显然没有。

我在互联网上注意到的一些选项是让它抛出 RunTimeException,我宁愿只作为最后的手段这样做,因为我喜欢服务调用的检查异常。我的直觉是服务调用应该完全在单独的层中完成,但我不确定迭代器将如何处理那里的分页。任何建议/链接表示赞赏。

最佳答案

这是一个完全可以接受的方法。

如何处理异常取决于您。如果异常类似于 AttemptToReadBeyondLimit,则只需从 hasNext 返回 false。如果它是类似 CommunicationsException 的东西,那么一定要抛出一个 RuntimeException

你不应该添加不必要的额外层。

关于java - 带有 Java 分页的迭代器设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41542295/

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