如何在 Java 中逐步对 int 数组进行切片?
How can I slice an int array by stride in Java?
我正在学习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:对不起,举个不好的例子。 my_list [::-2] 怎么样?
Edit2:我的意思是 my_list [::-2] 就像
my_list = [1,2,3,4]
my_new_list = my_list [::-2]
print my_new_list # [4,2]
Edit3:在 Python 中按步幅切片是 "check" 列表中的每一步(步幅)的项目。如果步骤为负数,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);
您可以通过以下方式完成,在 Collections#reverse
的帮助下,为了使用该方法,我们首先必须将数组转换为列表,在反转列表后,我们将再次将其转换为数组。如果可能.
,您应该更好地使用List
而不是数组
public class Test {
public static void main(String[] args) {
Integer[] arr = new Integer[] { 1, 2, 3, 4 };
List<Integer> list = Arrays.asList(arr);
Collections.reverse(list);
arr = list.toArray(new Integer[list.size()]);
System.out.println(Arrays.toString(arr));
}
}
输出
[4, 3, 2, 1]
Apache Commons Lang 有一个实用方法:
ArrayUtils.reverse(int[] array)
Java 没有内置你想要的东西,但你可以为它建立自己的逻辑,像这样,只需将值放在 val
中,例如 my_list[::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));
}
}
在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();
它应该适用于您提供的所有示例数组和步骤。
我正在学习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:对不起,举个不好的例子。 my_list [::-2] 怎么样?
Edit2:我的意思是 my_list [::-2] 就像
my_list = [1,2,3,4]
my_new_list = my_list [::-2]
print my_new_list # [4,2]
Edit3:在 Python 中按步幅切片是 "check" 列表中的每一步(步幅)的项目。如果步骤为负数,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);
您可以通过以下方式完成,在 Collections#reverse
的帮助下,为了使用该方法,我们首先必须将数组转换为列表,在反转列表后,我们将再次将其转换为数组。如果可能.
List
而不是数组
public class Test {
public static void main(String[] args) {
Integer[] arr = new Integer[] { 1, 2, 3, 4 };
List<Integer> list = Arrays.asList(arr);
Collections.reverse(list);
arr = list.toArray(new Integer[list.size()]);
System.out.println(Arrays.toString(arr));
}
}
输出
[4, 3, 2, 1]
Apache Commons Lang 有一个实用方法:
ArrayUtils.reverse(int[] array)
Java 没有内置你想要的东西,但你可以为它建立自己的逻辑,像这样,只需将值放在 val
中,例如 my_list[::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));
}
}
在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();
它应该适用于您提供的所有示例数组和步骤。