我有这个方法可以将 2 个排序的数组合并成一个排序的数组:
public void merge(T[] a, int l1, int r1, T[] b, int l2, int r2, T[] c, int l3) {
while (l1 < r1 && l2 < r2) {
if (a[l1].compareTo(b[l2]) < 0) {
c[l3++] = a[l1++];
} else
c[l3++] = b[l2++];
}
while (l1 < r1)
c[l3++] = a[l1++];
while (l2 < r2)
c[l3++] = b[l2++];
}
但现在我想用 4
arrays 一次完成。
我尝试了很长时间来想出一个解决方案,但并没有真正成功。有人知道怎么做吗?
最佳答案
使用 Java8 流有一种比手动执行此操作更简单的方法:
- 将所有数组合并为一个流(我使用了 2 个,但您可以使用任意多个):
int[] arr1 = {1, 7, 10};
int[] arr2 = {1, 2, 4, 9};
Stream<int[]> ints = Stream.of(arr1, arr2);
- 然后
flatMap
并在流中排序
它们:
IntStream intStream = ints.flatMapToInt(Arrays::stream).sorted();
当您打印它们时,您会看到所有排序的数字:
intStream.forEach(System.out::println);
1
1
2
4
7
9
10
结合在一个函数中,它看起来像这样:
public int[] merge(int[]... arrays) {
return Stream.of(arrays)
.flatMapToInt(Arrays::stream)
.sorted()
.toArray();
}
编辑:流的优点是,您可以根据需要进一步修改值。例如通过利用 distinct
函数,您可以轻松删除重复项:
intStream = intStream.distinct();
intStream.forEach(System.out::println);
1
2
4
7
9
10
关于java - 将 4 个排序数组合并为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72177195/