Java 优雅实现数组切片和拼接

发布于:2024-04-27 ⋅ 阅读:(19) ⋅ 点赞:(0)


一、字符串切片再拼接

某次的业务开发中,需要对字符串进行分割(split)并提取其中的某些部分以进行组合。然而,我在Java标准库中并没有找到一步到位的API来直接支持这种操作。希望在未来的几年里,Java能够在这方面优化其数组操作的API,使得此类常见操作更加便捷。

List<String> linesList = Arrays.stream(content.split("\n")).collect(Collectors.toList());

String line = String.join("", linesList.subList(index1, index2));

二、集合切片再拼接

Java对于数组的切片操作,没有直接提供类似于 JavaScript 中 slice() 方法那样便捷的功能,只能利用 Arrays.copyOfRange() 方法来实现数组的切片。

		int[] originalArray = {1, 2, 3, 4, 5, 6};
        int start = 1; // 起始索引(包含)
        int end = 4;   // 结束索引(不包含)

        // 使用 Arrays.copyOfRange() 进行切片
        int[] slicedArray = Arrays.copyOfRange(originalArray, start, end);

        // slicedArray 现在等于 {2, 3, 4}
        System.out.println(Arrays.toString(slicedArray));

再使用 Stream API 进行拼接

		Integer[] array1 = {1, 2, 3, 4, 5};
        Integer[] array2 = {6, 7, 8, 9, 10};

        // 定义切片范围
        int start1 = 1;
        int end1 = 3;
        int start2 = 2;
        int end2 = 4;

        // 对数组进行切片
        Integer[] slice1 = Arrays.copyOfRange(array1, start1, end1);
        Integer[] slice2 = Arrays.copyOfRange(array2, start2, end2);



        // 使用 Stream API 进行拼接
        Object[] array = Stream.concat(Arrays.stream(slice1), Arrays.stream(slice2))
                .toArray();

        // result 现在等于 {2, 3, 8, 9}
        Arrays.stream(array).forEach(System.out::println);

Stream.concat() 方法会一次性加载所有元素到内存中,因此如果要拼接的数组非常大,可能会有性能和内存消耗方面的考量。在处理大规模数据时,可能需要考虑其他更高效的数据结构或处理方式。