JAVA中的逻辑索引

JAVA中的逻辑索引,java,matlab,matrix,indexing,Java,Matlab,Matrix,Indexing,如何在Java中使用逻辑索引访问数组元素 Matlab/倍频程等效于我想做的: A = [1 2 3 4 5 6] logicalarray=[0 1 0 0 0 1]; result= A(logical) 它给出了result=[26] 如果我在Java中有相同的A和logicalarray。如何在不使用循环的情况下获得结果?您可以尝试以下方法: import java.util.Arrays; import java.util.stream.IntStream; public clas

如何在Java中使用逻辑索引访问数组元素

Matlab/倍频程等效于我想做的:

A = [1 2 3 4 5 6]
logicalarray=[0 1 0 0 0 1];
result= A(logical)
它给出了
result=[26]


如果我在Java中有相同的
A
logicalarray
。如何在不使用循环的情况下获得
结果?

您可以尝试以下方法:

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));
    }
}
正如前面提到的,您在Java中有一个完全不同的语法,并且您可能会使用

以下片段

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]
编辑如果需要保留
逻辑阵列
可能的解决方案是

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));

您不需要,您必须通过使用流和过滤器进行手动或隐式循环。@luk2302在性能方面,它们中的哪一个应该是首选的,或者它们都是相同的?为了获得更好的性能,我们通常倾向于避免八度循环。你能用不同的方法给出答案吗?我不熟悉Java,Java有完全不同的语法,你不能做你在matlab中能做的事情。除非您想从java调用matlab代码,否则逻辑数组是否只包含0和1,并以此指示
false
true
?然后,我会尝试使用一些
Map
,其中数字(来自A)作为键,并使用一个布尔值来指示数字是否要打包到结果数组或集合中。我建议您忘记所有关于Matlab的知识,从零开始学习java。它没有内置的对矩阵操作的支持,比如逻辑掩码。在您这样做之后,您可以查看像和这样的科学计算库,它们试图提供类似的功能。另外,你只能接受一个答案,所以选择一个你最喜欢的并接受它。你想投多少票就投多少票,但如果你的声望不超过15票,你的选票就不算多。非常感谢你。很抱歉,他们不让我两个都打勾answers@Ekaba他们不让我投票。他们把我的投票记录下来作为反馈。我已经试过了你是怎么介绍我和陆的?你只是复制了链接并添加了[@username](copiedLink)还是有更简单的方法?@Oleg我复制了链接。我不知道答案中还有其他方式。即使在评论中,你也只有一个名字的自动魔法。非常感谢