Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.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_Arrays_Arraylist_Split_Edges - Fatal编程技术网

Java 将arraylist拆分为单独的数组,每第三个元素是下一个数组的第一个元素

Java 将arraylist拆分为单独的数组,每第三个元素是下一个数组的第一个元素,java,arrays,arraylist,split,edges,Java,Arrays,Arraylist,Split,Edges,我试图将ArrayList拆分为单独的数组,以获得“边”。我需要将arraylist拆分为大小为3的数组,新拆分创建的数组的第3个元素是下一个数组的第1个元素。我目前所做的是,虽然第三个元素不是下一个元素的第一个元素,但arraylist已成功拆分为3个数组 示例:[1,2,3,4,5,6,7]需要拆分为[1,2,3],[3,4,5],[5,6,7],但我得到的是[1,2,3],[4,5,6],[7] 这是我使用的代码: for(ArrayList<String> path : al

我试图将ArrayList拆分为单独的数组,以获得“边”。我需要将arraylist拆分为大小为3的数组,新拆分创建的数组的第3个元素是下一个数组的第1个元素。我目前所做的是,虽然第三个元素不是下一个元素的第一个元素,但arraylist已成功拆分为3个数组

示例:[1,2,3,4,5,6,7]需要拆分为[1,2,3],[3,4,5],[5,6,7],但我得到的是[1,2,3],[4,5,6],[7]

这是我使用的代码:

for(ArrayList<String> path : allPaths) {
    edges = separate(path, 3);
}
for(List<String> edge : edges){
    System.out.println("Edge: "+edge);
}
for(ArrayList路径:AllPath){
边=分离(路径,3);
}
用于(列出边:边){
System.out.println(“Edge:+Edge”);
}
然后访问此方法

static <T> List<List<T>> separate (List<T> path, final int size){
    List<List<T>> separated = new ArrayList<>();

    for(int i = 0; i < path.size(); i+= size){
        separated.add(new ArrayList<>(path.subList(i, Math.min(path.size(), i + size))));
    }
    return separated;
}
静态列表分离(列表路径,最终整数大小){
List separated=new ArrayList();
for(int i=0;i
按以下步骤操作:

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> list = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9);
        System.out.println(separate(list, 3));
    }

    static <T> List<List<T>> separate(List<T> path, final int size) {
        List<List<T>> separated = new ArrayList<>();
        List<T> temp;
        for (int i = 0; i < path.size(); i += size - 1) {
            temp = (List<T>) path.subList(i, Math.min(path.size(), i + size));
            if (temp.size() != 1) {
                separated.add(new ArrayList<T>(temp));
            }
        }
        return separated;
    }
}
更新 @Mosby先生-你发表了关于不将子列表添加到
分隔的
的附加要求的评论,如果它只有一个元素,我相应地更新了上面给出的答案。如果您的要求是,当子列表的元素数少于
大小时,不要将其添加到
分隔的
,下面给出了解决方案:

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> list = List.of(1, 2, 3, 4, 5, 6, 7, 8);
        System.out.println(separate(list, 3));
    }

    static <T> List<List<T>> separate(List<T> path, final int size) {
        List<List<T>> separated = new ArrayList<>();
        List<T> temp;
        for (int i = 0; i < path.size(); i += size - 1) {
            temp = (List<T>) path.subList(i, Math.min(path.size(), i + size));
            if (temp.size() == size) {
                separated.add(new ArrayList<T>(temp));
            }
        }
        return separated;
    }
}
按如下方式操作:

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> list = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9);
        System.out.println(separate(list, 3));
    }

    static <T> List<List<T>> separate(List<T> path, final int size) {
        List<List<T>> separated = new ArrayList<>();
        List<T> temp;
        for (int i = 0; i < path.size(); i += size - 1) {
            temp = (List<T>) path.subList(i, Math.min(path.size(), i + size));
            if (temp.size() != 1) {
                separated.add(new ArrayList<T>(temp));
            }
        }
        return separated;
    }
}
更新 @Mosby先生-你发表了关于不将子列表添加到
分隔的
的附加要求的评论,如果它只有一个元素,我相应地更新了上面给出的答案。如果您的要求是,当子列表的元素数少于
大小时,不要将其添加到
分隔的
,下面给出了解决方案:

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> list = List.of(1, 2, 3, 4, 5, 6, 7, 8);
        System.out.println(separate(list, 3));
    }

    static <T> List<List<T>> separate(List<T> path, final int size) {
        List<List<T>> separated = new ArrayList<>();
        List<T> temp;
        for (int i = 0; i < path.size(); i += size - 1) {
            temp = (List<T>) path.subList(i, Math.min(path.size(), i + size));
            if (temp.size() == size) {
                separated.add(new ArrayList<T>(temp));
            }
        }
        return separated;
    }
}

您是否已经尝试将循环中的
i+=size
替换为
i+=size-1
@ArvindKumarAvinash你能帮我解决我之前提出的问题吗?因为我不知道怎么做,所以我尝试了if(separated.size()==1){separated.get(i.clear();}但是没有work@MrMosby-我已更新我的答案以满足此要求。如果有任何疑问/问题,请告诉我。@ArvindKumarAvinashThanks@MrMosby-如果拆分数组仅包含2个元素,该怎么办?应该加上吗?如果没有,请检查我答案中的更新。您是否已经尝试将循环中的
i+=size
替换为
i+=size-1
?如果人们不争论,我将不胜感激@ArvindKumarAvinash你能帮我解决我之前提出的问题吗?因为我不知道怎么做,所以我尝试了if(separated.size()==1){separated.get(i.clear();}但是没有work@MrMosby-我已更新我的答案以满足此要求。如果有任何疑问/问题,请告诉我。@ArvindKumarAvinashThanks@MrMosby-如果拆分数组仅包含2个元素,该怎么办?应该加上吗?如果没有,请检查我答案中的更新。