Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.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/6/google-chrome/4.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_Scala_Syntax - Fatal编程技术网

Java从数组中获取范围

Java从数组中获取范围,java,arrays,scala,syntax,Java,Arrays,Scala,Syntax,Java有数组丢弃的方法吗在Scala中,我们有:Array.drop(10)。take(16)或者可以获取数组的一系列成员? 例如,在Java中,我只能执行数组[10]。我认为通过流式处理数组来实现这种语义最简单: SomeClass[] sourceArray = /* something */; SomeClass[] result = Arrays.stream(sourceArray).skip(10L).limit(16L).toArray(SomeClass[]::ne

Java有数组丢弃的方法吗
在Scala中,我们有:
Array.drop(10)。take(16)
或者可以获取数组的一系列成员?

例如,在Java中,我只能执行
数组[10]

我认为通过流式处理数组来实现这种语义最简单:

SomeClass[] sourceArray = /* something */;

SomeClass[] result = 
    Arrays.stream(sourceArray).skip(10L).limit(16L).toArray(SomeClass[]::new);

数组::copyOfRange

它有三个参数:

  • original
    :源数组
  • from
    :起始索引,包括
  • :结束索引,独占
并不是说它返回一个新数组,这意味着如果更改结果数组的值,则原始数组不会更改

该方法被重载以适用于所有基元类型和对象

下面是一个使用示例:

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        final int[] source = IntStream.range(0, 10).toArray()
        System.out.println(Arrays.toString(source));

        final int[] result = Arrays.copyOfRange(source, 3, 8);
        System.out.println(Arrays.toString(result));
    }
}
其中打印:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[3, 4, 5, 6, 7]

有关详细信息,请参见

我个人认为,
Arrays::copyOfRange
更简洁、切中要害,并且可能具有更好的性能。@Marv我同意它更简洁,但它确实会给用户留下大量错误/边缘案例处理。这一点很好,但我不会在性能关键的情况下使用它。我刚刚用JMH做了一个快速基准测试,
Arrays::copyOfRange
版本快了大约200倍。相当于Scala或Java Streams解决方案:
static T[]dropN_takeM(T[]array,int-drop,int-take){return Arrays.copyOfRange(array,Math.min(drop,array.length),Math.max(drop+take,array.length))}
@DodgyCodeException你得再看一眼。对于长度为3的数组,
dropN_takeM(arr,10,20)
返回一个包含
27
空值的数组。一周中的任何一天我都会破例的!我认为
max
也必须是
min
才能工作。列表以这种方式操作会容易得多。@OldCurmudgeon同意。列表可以通过
List::subList
提供子列表的(可读)视图,这样就不需要像复制数组一样复制备份数据结构。