Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 根据位置将ArrayList修剪为设置的编号_Java_Android_Arrays_Arraylist - Fatal编程技术网

Java 根据位置将ArrayList修剪为设置的编号

Java 根据位置将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

我有一个从recyclerview获取所有媒体项的arraylist。然后找到所选介质的位置。我将通过ParcelableArrayList将该arraylist发送到另一个活动。问题是,如果大小超过1000,则在某些设备上会出现事务太大异常

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

例1。当前大小为2000,pos为100。我想修剪位置为75-125的arraylist(或创建新的arraylist),并丢弃其余部分

例2。如果当前大小为2000,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){

}
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);