Java - 显示列表中的n组记录?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java - 显示列表中的n组记录?相关的知识,希望对你有一定的参考价值。
我有一个list
,它在屏幕上有大约2000或更多的记录,这实际上使我的页面加载时更慢。现在我想要实现我有两个按钮previous
和next
。最初在屏幕上显示前50条记录,然后点击next
后显示另一组50条记录。我在我的rowNum
中有一个属性(object
),它存储了rownum
。
通过loop
迭代,我知道传统的做法。但有没有更快的方法来做到这就像我每次获取下50条记录时避免循环一样? activeCities
是拥有2000条记录的列表,我需要迭代它,每次都显示50条记录。以下是我目前正在使用的代码。
int rowNum=0;
MyCity myCityObject;
for(Object[] obj : activeCities) {
myCityObject = new MyCity();
myCityObject.setRowNum(rowNum);
rowNum++;
myCityObject.setCityUsers((String)obj[0]);
myCityObject.setCityPreferenceId(NumberUtil.convert((BigDecimal)obj[1]));
myCityObject.setHeadOfficeId(NumberUtil.convert((BigDecimal)obj[2]));
.
.
.
myNewList.add(myCityObject);
if(rowNum==numberReached)
break;
}
因为你这么说:它是主列表。这意味着您不会更改该数据。您可以将列表转换为地图,
地图 :
- 关键是页码
- 值是一个包含50条记录的列表
当你想要下一个或去任何页面时,你只需按键获取数据。
希望它有所帮助。
Java 8允许将操作编写为
List<MyCity> myNewList = Arrays.stream(activeCities, beginOffset, endOffsetExclusive)
.map(obj -> {
MyCity myCityObject = new MyCity();
myCityObject.setCityUsers((String)obj[0]);
myCityObject.setCityPreferenceId(NumberUtil.convert((BigDecimal)obj[1]));
myCityObject.setHeadOfficeId(NumberUtil.convert((BigDecimal)obj[2]));
.
.
.
return myCityObject;
})
.collect(Collectors.toList());
这并没有神奇地加速操作,但它完全符合所需要的,只有处理元素,你会在结果列表中找到它的MyCity
实例。
原则上,您可以将此流处理转换为并行,但将数组元素转换为对象实例并将它们存储到列表中,即使处理所有2000个元素,也不会因并行处理而受益。我想,实际昂贵的部分是在数据库或渲染方面或这些方之间的数据传输。
在现实世界中,没有人会迭代内存中的所有记录,以便占据前n行(也称为分页)。
相反,您希望在数据库级别上过滤这些记录,这意味着您的SQL查询(如果您当然使用RDBS)应该为您完成所有操作。
例如,如果您使用mysql,您可以尝试以下查询来获取50到100之间的记录:
SELECT * FROM cities LIMIT 50,100;
或者检索前50行:
SELECT * FROM cities LIMIT 50;
祝好运!
您可以创建一个新的属性pageInitialNumber,您可以在其中存储您的初始页码,每次用户按下一个或上一个时都会修改首选的抓取大小(在您的情况下为50).Initial为0.接下来按下后你就成为50.你得到了理念。之后需要在你的页面中使用每个组件的值,如activeCities.get(pageInitialNumber + incrementVariable),其中increment变量是这样的
int variableWhichIncrement= -1;
public Integer getIncrementVariable(){
variableWhichIncrement=variableWhichIncrement+1;
return variableWhichIncrement;
}
你需要在每次下一次或前一次按下后重置此变量值。这样你就不会迭代列表了。希望这能解决你的问题。
以上是关于Java - 显示列表中的n组记录?的主要内容,如果未能解决你的问题,请参考以下文章
Android:RecyclerView 不显示片段中的列表项
片段 A 的列表视图中的片段 B 中的新列表视图,单击 A 的列表项