Java:按值拆分数组

Java:按值拆分数组,java,Java,我正在尝试按值将数组拆分为子数组。例如(删除了main函数delaration和类名): int[]arr={1,5,3,4,2,2,5,3,1}; 用于(int i:splitByVal(arr)){ 系统输出打印LN(i); } 我已经有一种方法可以做到这一点: public int[][]splitByVal(arr){ int previitem=arr[0]; ArrayList chunks=新的ArrayList(); ArrayList currentChunk=新的Array

我正在尝试按值将数组拆分为子数组。例如(删除了
main
函数delaration和类名):

int[]arr={1,5,3,4,2,2,5,3,1};
用于(int i:splitByVal(arr)){
系统输出打印LN(i);
}
我已经有一种方法可以做到这一点:

public int[][]splitByVal(arr){
int previitem=arr[0];
ArrayList chunks=新的ArrayList();
ArrayList currentChunk=新的ArrayList();
用于(int i:arr){
如果(i==previitem){
(i)加入(i);
}
否则{
添加((整数[])currentChunk.toArray());
currentChunk.clear();
}
前一项=i;
}
返回chunks.toArray()
}

我想知道的是:有更好的方法吗?

正如评论中正确提到的那样,您没有在代码中提供
坡度的定义。因此,还不完全清楚您的代码在做什么

但是,如果我理解正确,这只是其中一种可能的方法:

public int[][] splitByValue(final int[] arr) {
    Map<Integer, Integer> map = new HashMap<>();
    for (int number : arr) {
        map.put(number, map.getOrDefault(number, 0) + 1);
    }
    int[][] result = new int[map.keySet().size()][];
    int i = 0;
    for (Integer key : map.keySet()) {
        result[i] = new int[map.get(key)];
        for (int j = 0; j < result[i].length; j++) {
            result[i][j] = key;
        }
        i++;
    }        
    return result;
}
public int[]splitByValue(最终int[]arr){
Map Map=newhashmap();
用于(整数编号:arr){
map.put(number,map.getOrDefault(number,0)+1);
}
int[][]结果=新的int[map.keySet().size()][];
int i=0;
for(整数键:map.keySet()){
结果[i]=新整数[map.get(key)];
对于(int j=0;j

这里的假设是您只处理整数数组。

什么是
slope
?如果当前元素与
previitem
不同,则
previitem=i。你应该把
.add(i)
放在
之外,否则
block@mangusta对不起,我写这个问题的时候正在读别的东西<代码>坡度
应为
i