我有一个数组列表,可以从 recyclerview 获取所有媒体项。然后我找到所选媒体的位置。我正在通过 ParcelableArrayList 将该数组列表发送到另一个 Activity 。问题是如果大小超过 1,000,我会在某些设备上收到事务过大的异常。
我想做的就是这个。如果 arraylist 大小超过 1000,找到中心 (pos) 并在数组中该位置的每一侧保留 25。
示例 1。当前大小为 2,000,pos 为 100。我想修剪 pos 75 - 125 的数组列表(或创建新的数组列表)并丢弃其余部分。
示例 2. 如果当前大小为 2,000,pos 为 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/