There is a "comparator":

Collections.sort(rows, new Comparator<String>() { @Override public int compare(String o1, String o2) { int r; Integer n1 = isNumber(o1); Integer n2 = isNumber(o2); if(n1 != -1 && n2 != -1) r = n1 - n2; // Это два числа! else r = o1.compareTo(o2); // Иначе это либо число и строка, либо строка и строка return r; } }); } 

How to make the elements of an array with null values, after sorting, be the first?

  • one
    In java 8 - Comparator.nullsFirst( yourComparator ) - zRrr
  • Yes, I have already tried it, but there is not always "yourComparator" ((Thank you. - Vard32

2 answers 2

Try this:

 Arrays.asList("2", "3", "1", null, null) .stream() .sorted((e1, e2) -> e1 == null ? -1 : e1.compareTo(e2)) .forEach(System.out::println); 

    Thank you Artem! I did it my way. It turned out of course for workers and peasants:

      Collections.sort(rows, new Comparator<String>() { @Override public int compare(String o1, String o2) { int r; Integer n1 = isNumber(o1); Integer n2 = isNumber(o2); if(n1 != -1 && n2 != -1) r = n1 - n2; // Это два числа! else { if(o1 == null || o2 == null) { if(o1 == null && o2 != null) r = -1; else if(o1 != null && o2 == null) r = 1; else r = 0; } else r = o1.compareTo(o2); // Иначе это либо число и строка, либо строка и строка } return r; } }); 

    Your option is more elegant, but for me it is not very clear.