Java 根据位置将ArrayList修剪为设置的编号
我有一个从recyclerview获取所有媒体项的arraylist。然后找到所选介质的位置。我将通过ParcelableArrayList将该arraylist发送到另一个活动。问题是,如果大小超过1000,则在某些设备上会出现事务太大异常 我想做的就是这样。如果arraylist的大小超过1000,请找到中心(位置),并在数组中该位置的每侧保留25个 例1。当前大小为2000,pos为100。我想修剪位置为75-125的arraylist(或创建新的arraylist),并丢弃其余部分 例2。如果当前大小为2000,pos为0,我希望保留0-25Java 根据位置将ArrayList修剪为设置的编号,java,android,arrays,arraylist,Java,Android,Arrays,Arraylist,我有一个从recyclerview获取所有媒体项的arraylist。然后找到所选介质的位置。我将通过ParcelableArrayList将该arraylist发送到另一个活动。问题是,如果大小超过1000,则在某些设备上会出现事务太大异常 我想做的就是这样。如果arraylist的大小超过1000,请找到中心(位置),并在数组中该位置的每侧保留25个 例1。当前大小为2000,pos为100。我想修剪位置为75-125的arraylist(或创建新的arraylist),并丢弃其余部分 例2
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){
}
ArrayList current=新的ArrayList(mAdapter.getMedia());
对于(int i=0;i1000){
}
这应该可以做到:
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));
}
这将避免在构建新的ArrayList
时所涉及的复制
当然,如果您需要原始的
当前的
进行其他处理,只需将子列表存储在不同的变量中。请查看与我想要的完全相同的内容。但是我在current=current.sublist(from,to)上得到了一个不兼容的类型;必须是arraylist才能发送到activity@Bignadad-对不起。我更新了答案以处理类型不匹配的问题。
current = current.subList(from, to);