Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 邻域过滤阵列_Java_Arrays_Nearest Neighbor - Fatal编程技术网

Java 邻域过滤阵列

Java 邻域过滤阵列,java,arrays,nearest-neighbor,Java,Arrays,Nearest Neighbor,有没有一种简单的方法可以快速过滤一组元素,只输出相邻元素 假设我有一个元素数组。现在我想找到一个特定元素的邻居 我编写的代码可以工作,但看起来很难看,我想找到一个更容易阅读的解决方案 我的代码: int[] myArray = {6, 8, 9, 12, 30}; // index of element where I want to find the neighbors of int index = 1; if(index == 0){ //first element so only a

有没有一种简单的方法可以快速过滤一组元素,只输出相邻元素

假设我有一个元素数组。现在我想找到一个特定元素的邻居

我编写的代码可以工作,但看起来很难看,我想找到一个更容易阅读的解决方案

我的代码:

int[] myArray = {6, 8, 9, 12, 30};
// index of element where I want to find the neighbors of
int index = 1;

if(index == 0){
  //first element so only add the right neighbor
  System.out.println(myArray[1]);
} else if(index == myArray.length -1){
  //last element so only add left neighbor
  System.out.println(myArray[index-1]);
} else{
  //middle element so add both neighbors
  System.out.println(myArray[index-1]);
  System.out.println(myArray[index+1]);
}

以下是一个好的简短解决方案:

if(index > 0) System.out.println(myArray[index-1])
if(index < array.length-1) System.out.println(myArray[index+1])
final int[] numbs = { 1, 3, 5, 7 };
int index = 2;
IntStream.rangeClosed(index - 1, index + 1)
        .filter(idx -> idx != index && idx >= 0 && idx < numbs.length)
        .forEach(idx -> System.out.println(numbs[idx]));
if(index>0)System.out.println(myArray[index-1])
if(index
以下是一个简单有效的解决方案:

if(index > 0) System.out.println(myArray[index-1])
if(index < array.length-1) System.out.println(myArray[index+1])
final int[] numbs = { 1, 3, 5, 7 };
int index = 2;
IntStream.rangeClosed(index - 1, index + 1)
        .filter(idx -> idx != index && idx >= 0 && idx < numbs.length)
        .forEach(idx -> System.out.println(numbs[idx]));
if(index>0)System.out.println(myArray[index-1])
if(index
实际上,使用Java 8,您可以通过非常简单的lambda解决方案来使用它:

if(index > 0) System.out.println(myArray[index-1])
if(index < array.length-1) System.out.println(myArray[index+1])
final int[] numbs = { 1, 3, 5, 7 };
int index = 2;
IntStream.rangeClosed(index - 1, index + 1)
        .filter(idx -> idx != index && idx >= 0 && idx < numbs.length)
        .forEach(idx -> System.out.println(numbs[idx]));
final int[]numbs={1,3,5,7};
int指数=2;
IntStream.rangeClosed(索引-1,索引+1)
.filter(idx->idx!=索引和&idx>=0和&idxSystem.out.println(numbs[idx]);

但是,请创建一个接收数组和索引的方法,以便重用代码。

实际上,使用Java 8,您可以通过非常简单的lambda解决方案来使用它:

if(index > 0) System.out.println(myArray[index-1])
if(index < array.length-1) System.out.println(myArray[index+1])
final int[] numbs = { 1, 3, 5, 7 };
int index = 2;
IntStream.rangeClosed(index - 1, index + 1)
        .filter(idx -> idx != index && idx >= 0 && idx < numbs.length)
        .forEach(idx -> System.out.println(numbs[idx]));
final int[]numbs={1,3,5,7};
int指数=2;
IntStream.rangeClosed(索引-1,索引+1)
.filter(idx->idx!=索引和&idx>=0和&idxSystem.out.println(numbs[idx]);

但是,请创建一个接收数组和索引的方法,以便重用代码。

我认为这不是一个好主意,因为流通常会执行很长时间。另外,lambda通常比简单的if-else更难理解。无需对整个数组范围进行流式处理。您可以只对邻居
IntStream.rangeClosed(index-1,index+1)
和过滤器
idx!=index&&idx>=0&&idx
是的,对于不研究lambda的人来说,lambda很难理解。因此,如果您不知道如何使用它们,请不要使用@AntonSorokin,也不要使用新的Java功能。@RhuanKarlus我的消息并不意味着我不知道lambda,或者我建议不学习/使用新的语言功能。我的意思是,当有一个更简单的构造时,不需要使用复杂的版本。我认为这不是一个好主意,因为流通常执行很长时间。另外,lambda通常比简单的if-else更难理解。无需对整个数组范围进行流式处理。您可以只对邻居
IntStream.rangeClosed(index-1,index+1)
和过滤器
idx!=index&&idx>=0&&idx
是的,对于不研究lambda的人来说,lambda很难理解。因此,如果您不知道如何使用它们,请不要使用@AntonSorokin,也不要使用新的Java功能。@RhuanKarlus我的消息并不意味着我不知道lambda,或者我建议不学习/使用新的语言功能。我的意思是,当有更简单的结构时,不需要使用复杂的版本。