Как сделать слияние двух списков с последующей сортировкой?

81
17 марта 2021, 14:30

Даны два списка. Необходимо слить два списка в один, отсортировать по убыванию и вывести.

Вводится целое число N и N чисел со следующей строки через пробел, потом целое число M и М чисел со следующей строки.

    Пример1:
    Ввод
    5
    1 2 3 4 5
    7
    5 4 3 1 2 6 7
    Вывод:
    7 6 5 5 4 4 3 3 2 2 1 1
    Пример2:
    Ввод
    7
    0 3 1 5 7 4 6
    11
    1 1 1 1 1 1 1 1 1 1 1 
    Вывод
    7 6 5 4 3 1 1 1 1 1 1 1 1 1 1 1 1 0

Набросал всего подряд, вроде как понимаю что нужно при помощи list.addAll(....) списки объединить, а потом сортировать и при помощи реверса развернуть...но не получается желаемый результат.

    public static void main(String[] args) throws Exception
{
    Scanner a = new Scanner(System.in);
    Scanner b = new Scanner(System.in);
    Scanner c = new Scanner(System.in);
    Scanner d = new Scanner(System.in);
    ArrayList<Integer> list = new ArrayList<>();
    ArrayList<Integer> list2 = new ArrayList<>();
    for (int i=0; i<5; i++) {
        list.add(b.nextInt());
    }
    for (int i=0; i<5; i++) {
        list.add(d.nextInt());
    }
    list.addAll(list2);
    Collections.sort(list);
    Collections.reverse(list);
    for (int i : list)
        System.out.print(i + " ");
}

Помогите с решением.

Answer 1

Вам же даются размер списков, почему вы их игнорируете, а оба цикла у вас до 5?

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    ArrayList<Integer> list = new ArrayList<>();
    int n;
    n = sc.nextInt();
    for (int i = 0; i < n; i++) {
        list.add(sc.nextInt());
    }
    n = sc.nextInt();
    for (int i = 0; i < n; i++) {
        list.add(sc.nextInt());
    }
    Collections.sort(list);
    Collections.reverse(list);
    for (int i : list)
        System.out.print(i + " ");
}
Answer 2
public class Main {
    private final static Function<String, Stream<Integer>> CREATE_STREAM
            = (s) -> Arrays.stream(s.split(" ")).map(Integer::valueOf);
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Stream.concat(CREATE_STREAM.apply(sc.nextLine()), CREATE_STREAM.apply(sc.nextLine()))
                .sorted(Comparator.reverseOrder())
                .forEach(System.out::println);
    }
}

Ну или так...

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    Stream.of(sc.nextLine(),sc.nextLine())
            .flatMap(s->Arrays.stream(s.split(" ")))
            .map(Integer::valueOf)
            .sorted(Comparator.reverseOrder())
            .forEach(System.out::println);
}
READ ALSO
После доставания JSONObject из json пропадает поле id. Java. vk api

После доставания JSONObject из json пропадает поле id. Java. vk api

Изначально json приходит в виде (в списке items есть поле id равное 4 у первого элемента !!!):

104
Создание Java-ярлыка в рабочем окружении KDE. Ubuntu

Создание Java-ярлыка в рабочем окружении KDE. Ubuntu

Хочу создать ярлык Java-приложения у себя на рабочем столе (и вообще чтобы в списке приложений былоФайл я создал в директории usr/share/applications с расширением

93
Локализация с помощью JS

Локализация с помощью JS

Нашел такой код, где уже куча нужных языков и нужный текст

107