Я написал функцию слияния, которая объединяет два отсортированных списка в один отсортированный список. Ниже приведен сценарий для кода.Java generic merge
- Слияние списков [2, 4, 6], [3, 5, 6, 7] дает [2, 3, 4, 5, 6, 6, 7].
- Слияние списков [«Алиса», «Том»], [«Боб», «Ричард»] производит [«Алиса», «Боб», «Ричард», «Том»].
- Слияние списков [2.3, 4.5], [2,5] дает [2, 2.3, 4.5, 5].
Слияние списков ["A", "XYZ", "AXTU"] и [2, 4, 6] (где первый список сортируется по длине слова и в операции слияния, если длина строки в первый список совпадает с номером во втором списке, первая строка) производит [«A», 2, «XYZ», «AXTU», 4, 6];
public static void testCombine() { ArrayList<ArrayList<String>> mainList = new ArrayList<>(); ArrayList<String> list1 = new ArrayList<String>(Arrays.asList("Alice", "Tom")); ArrayList<String> list2 = new ArrayList<String>(Arrays.asList("Bob", "Richard")); mainList.add(list1); mainList.add(list2); System.out.println(combine(mainList.stream())); } private static <T extends Comparable<? super T>> ArrayList<T> combine(Stream<ArrayList<T>> stream) { return stream.reduce((x, y) -> { x.addAll(y); Collections.sort(x); return x; }).get(); }
Но, я не получаю результат для 3-х и 4-х типов. Я должен выполнить самую общую возможную функцию слияния, считая, что списки входных данных отсортированы в порядке (в соответствии с естественным или заданным порядком)
Обеспечить обычай 'Comparator' для' Collections.sort() 'для # 4 – kjsebastian
Не заставляйте своих пользователей создавать поток, когда все, что им нужно, состоит в объединении двух списков. Ваш метод комбинирования должен иметь подпись 'static, U extends Comparable > Список
Кроме того, весь смысл слияния списков _sorted_ заключается в том, что вам не придется сортировать их снова! –