如何在Java中使用逻辑索引访问数组元素?
我想要做的Matlab/Octave等价物:
A = [1 2 3 4 5 6]
logicalarray=[0 1 0 0 0 1];
result= A(logical)
这段代码给出了结果为 result=[2 6]
如果我在Java中有相同的A
和logicalarray
,那么如何在不使用循环的情况下获取result
?
如何在Java中使用逻辑索引访问数组元素?
我想要做的Matlab/Octave等价物:
A = [1 2 3 4 5 6]
logicalarray=[0 1 0 0 0 1];
result= A(logical)
这段代码给出了结果为 result=[2 6]
如果我在Java中有相同的A
和logicalarray
,那么如何在不使用循环的情况下获取result
?
如@Oleg所说,Java中的语法与其他语言完全不同。而且,正如@luk2302所提到的,你可能会使用Streams。
以下是代码片段:
int[] a = {1, 2, 3, 4, 5, 6};
// logicalarray=[0 1 0 0 0 1];
// index is zero-based in Java
int[] result = IntStream.of(1, 5)
.map(i -> a[i])
.toArray();
System.out.println("result = " + Arrays.toString(result));
将会打印
result = [2, 6]
编辑 如果您需要保留logicalarray
,可能的解决方案是
int[] a = {1, 2, 3, 4, 5, 6};
int[] logicalarray = {0, 1, 0, 0, 0, 1};
int[] result = IntStream.range(0, logicalarray.length) // create a stream of array indexes
.filter(i -> logicalarray[i] == 1) // filter the indexes which are 1 in logicalarray
.map(i -> a[i]) // map the related value from array a
.toArray(); // create an array of the values
System.out.println("result = " + Arrays.toString(result));
您可以尝试类似以下的操作:
import java.util.Arrays;
import java.util.stream.IntStream;
public class Example {
public static void main(String[] args) {
int[] A = {1, 2, 3, 4, 5, 6};
int[] L = {0, 1, 0, 0, 0, 1};
int[] n = IntStream.range(0, A.length).map(i -> A[i] * L[i]).filter(i->i>0).toArray();
System.out.println(Arrays.toString(n));
}
}