Java - 在步骤中切片任何数组

时间:2016-06-20 18:46:25

标签: java arrays arraylist slice

在python中,我们可以执行以下操作:

 array = [0,1,2,3,4,5,6,7,8,9,10]
 new_array= array[::3]
 print(new_array)
>>>[0,3,6,9]

Java中是否有相同的内容?我一直在寻找这种类型的阵列切片,但我没有运气。任何帮助都会很棒,谢谢!

3 个答案:

答案 0 :(得分:6)

如果您使用的是Java 8,那么您可以使用流并执行以下操作:

int [] a = new int [] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

// filter out all indices that evenly divide 3
int [] sliceArr = IntStream.range(0, a.length).filter(i -> i % 3 == 0)
    .map(i -> a[i]).toArray();

System.out.println(Arrays.toString(sliceArr));

<强>输出: [0,3,6,9]

答案 1 :(得分:2)

Arrays中有一个方法可能会有所帮助。

 int[] newArr = Arrays.copyOfRange(arr, 5,10); 

这显然远不如python实现强大。

答案 2 :(得分:0)

Java没有内置机制。你可以写一个辅助函数:

public static int[] sliceArray(int[] arr, int spacing) {
    int curr = 0;
    int[] newArr = new int[((arr.length - 1) / spacing) + 1];
    for (int i = 0; i < newArr.length; ++i) {
        newArr[i] = arr[curr];
        curr += spacing;
    }
    return newArr;
}

Example

请注意,如果您可以使用Java 8,那么Michael的答案会更好(或者至少不那么冗长)。