В строке ошибки создается новый ArrayList <> (), даже если предыдущий ArrayList используется повторно, поэтому попробуйте:
List<Integer> list = map.get(factor);
if (list == null) {
list = new ArrayList<>();
map.put(factor, list);
}
list.add(num);
In java 9 List.of (num) является неизменным, поэтому. добавить (num) к существующему не удастся, но в Java 8+ вы можете использовать это более краткое определение, которое создает новый ArrayList только при необходимости:
var map = new TreeMap<Integer, List<Integer>>(Collections.reverseOrder());
...
map.computeIfAbsent(factor, ArrayList::new).add(num);