文章目录
一、字符串切片再拼接
某次的业务开发中,需要对字符串进行分割(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() 方法会一次性加载所有元素到内存中,因此如果要拼接的数组非常大,可能会有性能和内存消耗方面的考量。在处理大规模数据时,可能需要考虑其他更高效的数据结构或处理方式。