java - 根据位置将 ArrayList 修剪为一组数字

标签 java android arrays arraylist

我有一个数组列表,可以从 recyclerview 获取所有媒体项。然后我找到所选媒体的位置。我正在通过 ParcelableArrayList 将该数组列表发送到另一个 Activity 。问题是如果大小超过 1,000,我会在某些设备上收到事务过大的异常。

我想做的就是这个。如果 arraylist 大小超过 1000,找到中心 (pos) 并在数组中该位置的每一侧保留 25。

示例 1。当前大小为 2,000,po​​s 为 100。我想修剪 pos 75 - 125 的数组列表(或创建新的数组列表)并丢弃其余部分。

示例 2. 如果当前大小为 2,000,po​​s 为 0,我想保留 0-25。

ArrayList<Media> current = new ArrayList<>(mAdapter.getMedia());
    for (int i = 0; i < current.size(); i++) {
        if (current.get(i).getPath().equalsIgnoreCase(media.getPath()))
            pos = i;
    } 

if (current.size() > 1000){

}

最佳答案

应该这样做:

if (current.size() > 1000){
    int from = Math.max(0, pos - 25);
    int to = Math.min(pos + 25, current.size()); // or perhaps pos + 26?
    current = new ArrayList<>(current.subList(from, to));
}

如果您的其他代码允许,最好更改 current 的声明类型来自 ArrayList<Media>List<Media> .然后你可以替换 if 的最后一行阻止:

current = current.subList(from, to);

这将避免在构建新的 ArrayList 时涉及复制.

当然,如果你需要原版current对于其他处理,只需将子列表存储在不同的变量中即可。

关于java - 根据位置将 ArrayList 修剪为一组数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49885135/

相关文章:

java - 限制 try block 范围。有关系吗?

java - 如何在我的 JFrame 中调整这些面板的大小?

java - 如何创建全局 "Intent explicitIntent = new Intent(...)"方法

javascript - 如何删除或过滤数组中的特定对象

PHP查询转json

java - 带有 view.getLocationOnScreen 的 NullPointerException

java - 报告短语中所有字符与字母表中所有字符的匹配状态

android - 连接超时时数据是否已经发送到服务器

android - 如何在 Android Studio 中停止跟踪被忽略的文件

Javascript复制对象数组中的嵌套数组