如何在Java中按步幅分割int数组?

如何在Java中按步幅分割int数组?,java,arrays,methods,slice,stride,Java,Arrays,Methods,Slice,Stride,我正在学习Java 在Python中,我可以: my_list = [1,2,3,4] my_new_list = my_list [::-1] print my_new_list # [4,3,2,1] 在Java中有没有什么方法可以在int数组上实现这一点 Edit1:很抱歉这个坏例子。我的清单怎么样 编辑2:我的意思是我的清单[:-2]是这样的 my_list = [1,2,3,4] my_new_list = my_list [::-2] print my

我正在学习Java

在Python中,我可以:

my_list = [1,2,3,4]
my_new_list = my_list [::-1]
print my_new_list                # [4,3,2,1]
在Java中有没有什么方法可以在int数组上实现这一点

Edit1:很抱歉这个坏例子。我的清单怎么样

编辑2:我的意思是我的清单[:-2]是这样的

my_list = [1,2,3,4]
my_new_list = my_list [::-2]
print my_new_list                # [4,2]
Edit3:Python中的按步幅切片是每一步“检查”列表中的项(步幅)。如果步骤为负,Python将从列表的末尾到列表的开头检查该项。例如:

my_list = [1,2,3,4,5,6,7,8,9]
my_list1 = my_list[::2]       # my_list1 becomes [1,3,5,7,9]
my_list2 = my_list[::3]       # my_list2 becomes [1,4,7]
my_list3 = my_list[::4]       # my_list3 becomes [1,5,9]
my_list4 = my_list[::-3]      # my_list4 becomes [9,6,3]

您可以将数组转换为列表,然后在该列表上使用
Collections.reverse()

Integer a[]={1,2,3,4};
List <Integer> list = Arrays.asList(a);
System.out.println(list);
Collections.reverse(list);
System.out.println(list);
整数a[]={1,2,3,4};
List=Arrays.asList(a);
系统输出打印项次(列表);
收款。反向(列表);
系统输出打印项次(列表);

您可以按照以下方式进行操作,借助并使用该方法,我们首先必须将数组转换为列表,在反转列表后,我们将再次将其转换为数组。如果可能,最好使用
List
而不是数组

有一个实用方法:

ArrayUtils.reverse(int[] array)

Java没有你想要的东西,但是你可以为它构建你自己的逻辑,就像这样,只需将值放入
val
,例如我的列表[::2]2在这种情况下
val
将是
2

public static void main (String[] args) throws java.lang.Exception
{
int ml[] = {1,2,3,4,5,6,7,8,9};
int val = -2;
ArrayList al = new ArrayList();
if(val>0){
for(int i = 0 ; i<ml.length;i+=val){
    al.add(ml[i]);
}
}
else if(val<0){
for(int i = ml.length-1 ;  i>=0; i+=val){
    al.add(ml[i]);
}   

}


for(int i = 0 ; i<al.size();i++){
    System.out.println(al.get(i));
}

}
publicstaticvoidmain(字符串[]args)抛出java.lang.Exception
{
int-ml[]={1,2,3,4,5,6,7,8,9};
int val=-2;
ArrayList al=新的ArrayList();
如果(val>0){

对于(inti=0;i您可以在Java8中这样编写它

int a = { 1, 2, 3, 4 };
int step = -2;

int b = IntStream.range(0, a.length)
            .filter(i -> i%step == 0)
            .map(i -> a[(step < 0) ? a.length-i-1 : i])
            .toArray();
inta={1,2,3,4};
int步长=-2;
intb=IntStream.range(0,a.length)
.filter(i->i%步骤==0)
.map(i->a[(步长<0)?a.length-i-1:i])
.toArray();

它应该适用于您提供的所有示例数组和步骤。

@Boristespider感谢您提供的方法。只需按步幅切片如何?如我的列表[:-2]这是一个单独的问题-请在发布时描述您的完整问题,而不是其中的一部分。@BoristheSpider我很抱歉这个令人困惑的示例。此外,并非所有Java开发人员都会讲Python-请描述问题、输入和预期输出。@BoristheSpider很抱歉,我将很快进行编辑。我很抱歉这个误导性的示例,c我会做一些类似我的清单[:-2]?@JayWong你能解释更多关于output@JayWong这段代码乱七八糟-我不会用它。你最好用一个智能的
迭代器
设计来创建一个“视图”如果您能为他提供更好的解决方案,而不是告诉他怎么做,我将不胜感激,因为他是java新手。
public static void main (String[] args) throws java.lang.Exception
{
int ml[] = {1,2,3,4,5,6,7,8,9};
int val = -2;
ArrayList al = new ArrayList();
if(val>0){
for(int i = 0 ; i<ml.length;i+=val){
    al.add(ml[i]);
}
}
else if(val<0){
for(int i = ml.length-1 ;  i>=0; i+=val){
    al.add(ml[i]);
}   

}


for(int i = 0 ; i<al.size();i++){
    System.out.println(al.get(i));
}

}
int a = { 1, 2, 3, 4 };
int step = -2;

int b = IntStream.range(0, a.length)
            .filter(i -> i%step == 0)
            .map(i -> a[(step < 0) ? a.length-i-1 : i])
            .toArray();