Merge two lists in Java and sort them using Object property and another condition
Your problem statement is not very clear.  As I understand it, you want to have a combined sorted list but interleave elements from list1 and list2 whenever the age is the same.

Here's a simple implementation of that logic.  I used java 8 streams to sort lists and put them in ArrayDeques.

import static java.util.stream.Collectors.toCollection;
import static java.util.Comparator.comparingInt;

static&lt;T&gt; List&lt;T&gt; interleaveSort(List&lt;T&gt; list1, List&lt;T&gt; list2, Comparator&lt;T&gt; cmp) {
    // sort the lists and set them up as queues
    Deque&lt;T&gt; x = list1.stream().sorted(cmp).collect(toCollection(ArrayDeque::new));
    Deque&lt;T&gt; y = list2.stream().sorted(cmp).collect(toCollection(ArrayDeque::new));

    List&lt;T&gt; result = new ArrayList&lt;&gt;(x.size() + y.size());

    while (!x.isEmpty() &amp;&amp; !y.isEmpty()) {
        if (cmp.compare(x.peek(), y.peek()) &gt; 0) {
            result.add(y.poll());
        } else {
            // whenever we pick from X, swap queues so next time we will favor the other list
            result.add(x.poll());
            Deque&lt;T&gt; t = x;
            x = y;
            y = t;
        }
    }
    // since the while loop terminates when one of the queues is empty
    // we should add the left-over elements
    result.addAll(x);
    result.addAll(y);

    return result;
}


Then, in your main method:

List&lt;Person&gt; allList=interleaveSort(list1, list2, comparing(Person::getAge).reversed());