[英]How to merge two arrays in Java into one sorted ArrayList?
我有lArr
(left) {1,2,4,5}
和rArr
(right) {6,8,10,13}
,我想將它們合並到一個排序數組中,但我的代碼沒有按我想要的方式運行至。
private static ArrayList merge(int[] lArr, int[] rArr) {
ArrayList mergedArray = new ArrayList();
int i = 0;
int j = 0;
while (i < lArr.length && j < rArr.length) {
if (lArr[i] < rArr[j]) {
mergedArray.add(lArr[i]);
i++;
}
// so up until here, the code runs,
// but it never reaches the else segment.
else {
mergedArray.add(rArr[j]);
j++;
}
}
return mergedArray;
}
從 main 調用merge()
方法后,只顯示lArr(left array)
。
您應該先合並 arrays 然后對數組進行排序。
您可以通過創建 ArrayList 輕松合並 arrays,對於 arrays 中的每個元素,將它們添加到 Z57A97A39435CFDFEDAZ6 中,如下所示:
// just an example of values
int[] lArr = {1,2,8};
// just an example
int[] rArr = {-7,54,9,34,27};
ArrayList<Integer> mergedList = new ArrayList<Integer>();
// Loop through lArr and add each element to mergedList
for(int element : lArr) mergedList.add(element);
// Loop through rArr and add each element to mergedList
for(int element : rArr) mergedList.add(element);
現在您可以使用Collections.sort(list, comparator)
對列表進行排序,如下所示:
Collections.sort(mergedList, new Comparator<Integer>() {
// A comparator compares two value (logic)
// This function needs to return 1 if a > b and -1 if b < a
// and if a = b then 1 or -1 won't change anything
public int compare(Integer a, Integer b){
if(a > b) return 1;
return -1;
}
});
您可以使用streams
合並和排序兩個 arrays :
public static void main(String[] args) {
int[] arr1 = {5, 2, 3, 4, 1};
int[] arr2 = {2, 1, 3, 4, 5};
ArrayList<Integer> list = merge(arr1, arr2);
System.out.println(list);
// [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]
}
private static ArrayList<Integer> merge(int[] lArr, int[] rArr) {
return Stream.of(lArr, rArr)
.flatMapToInt(Arrays::stream)
.sorted()
.collect(ArrayList::new, ArrayList::add, ArrayList::addAll);
}
您可能想要添加自定義比較器並使用varargs
:
public static void main(String[] args) {
int[] arr1 = {5, 2, 5, 4, 1};
int[] arr2 = {2, 1, 3, 4, 3};
ArrayList<Integer> list =
merge(Comparator.reverseOrder(), arr1, arr2);
System.out.println(list);
// [5, 5, 4, 4, 3, 3, 2, 2, 1, 1]
}
private static ArrayList<Integer> merge(
Comparator<Integer> comparator, int[]... arrays) {
return Stream.of(arrays)
.flatMapToInt(Arrays::stream)
.boxed()
.sorted(comparator)
.collect(ArrayList::new, ArrayList::add, ArrayList::addAll);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.