Java-按步骤切片任何数组

Java-按步骤切片任何数组,java,arrays,arraylist,slice,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中是否有与此等效的语言?我一直在寻找这种类型的阵列切片,但我没有运气。任何帮助都会很好,谢谢 数组中有一种方法可能会有所帮助 int[] newArr = Arrays.copyOfRange(arr, 5,10); 它显然远不如python实现强

在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中是否有与此等效的语言?我一直在寻找这种类型的阵列切片,但我没有运气。任何帮助都会很好,谢谢

数组中有一种方法可能会有所帮助

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

它显然远不如python实现强大

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

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]

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;
}
公共静态int[]切片数组(int[]arr,int间距){
int curr=0;
int[]newArr=newint[((arr.length-1)/间距)+1];
对于(int i=0;i


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

简短的答案是否定的;很长一段时间的答案是没有,复制品真的适用吗?这个问题是关于以设定的间隔进行切片的,而链接的问题更适合于获取数组的一般子集(如果它在一个连续的部分中,这是可行的),并且仅在一个答案的注释中提到切片。不管怎样,我同意这个结论;没有内部的方法可以做到这一点,但是你可以很容易地为它编写一个helper函数。对不起,这个问题回答错了。将删除该评论。感谢@Ironcache指出这一点。这并不是OP特别要求的。“您可以编写帮助函数”并不是许多语言现成的基本功能的答案。当然我们可以自己写,我们总是可以自己写。我不明白你的意思。Java(正在讨论的语言)并不是开箱即用的(正如我在回答中所说的);这就是问题所在,这里没有任何答案可以绕过缺乏内置语法来处理这个问题。