Java - 显示列表中的n组记录?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java - 显示列表中的n组记录?相关的知识,希望对你有一定的参考价值。

我有一个list,它在屏幕上有大约2000或更多的记录,这实际上使我的页面加载时更慢。现在我想要实现我有两个按钮previousnext。最初在屏幕上显示前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 的列表项

片段中的 notifyDataSetChanged() 不刷新列表视图

片段中的ListView不显示

如何将列表视图中的数据从一个片段发送到另一个片段

PHP - 列表中的“n”个孩子