Java中具有特殊字符的排序整数

Java中具有特殊字符的排序整数,java,comparator,Java,Comparator,我有一个问题,我需要对用连字符分隔的整数进行升序或降序排序 我试着用 Collections.sort(list, Collections.reverseOrder()); 其中,list是创建的ArrayList的一个实例,但它没有给出确切的结果 arrayList如下所示: [91,95,96-1,94-2,94-1,100-2]. 预期的方式是: [91,94-1,94-2,95,96-1,100-2] 对字符串使用默认排序将使用字典顺序,而您打算按数字顺序(如果第一个数字相等,则按

我有一个问题,我需要对用连字符分隔的整数进行升序或降序排序

我试着用

Collections.sort(list, Collections.reverseOrder());
其中,
list
是创建的
ArrayList
的一个实例,但它没有给出确切的结果

arrayList如下所示:

[91,95,96-1,94-2,94-1,100-2].
预期的方式是:

[91,94-1,94-2,95,96-1,100-2]

对字符串使用默认排序将使用字典顺序,而您打算按数字顺序(如果第一个数字相等,则按第二个数字)对字符串进行排序。实现这一点的一种方法是使用两个比较器:

List<String> list = new ArrayList<>(Arrays.asList("96-1","91","94-2","100-2","94-1","95"));
System.out.println("Unsorted: "+list);

Comparator<String> primaryComparator =
  (a,b)->Integer.valueOf(a.split("-")[0])
          .compareTo(Integer.valueOf(b.split("-")[0]));
Comparator<String> secondaryComparator =
  (a,b)->Integer.valueOf(a.split("-")[1])
          .compareTo(Integer.valueOf(b.split("-")[1]));
list.sort(primaryComparator.thenComparing(secondaryComparator));
System.out.println("Sorted: "+list);
list.sort(primaryComparator.thenComparing(secondaryComparator).reversed());
System.out.println("Sorted in reverse: "+list);
List List=newarraylist(Arrays.asList(“96-1”、“91”、“94-2”、“100-2”、“94-1”、“95”);
System.out.println(“未排序:+列表);
比较器初级比较器=
(a,b)->Integer.valueOf(a.split(“-”[0]”)
.compareTo(整型.valueOf(b.split(“-”[0]));
比较器二次比较器=
(a,b)->Integer.valueOf(a.split(“-”[1]”)
.compareTo(整型.valueOf(b.split(“-”[1]));
排序(primaryComparator.ThenComparating(secondaryComparator));
System.out.println(“排序:+列表);
sort(primaryComparator.ThenComparating(secondaryComparator.reversed());
System.out.println(“反向排序:+列表);

至于比较器本身,我假设列表中的字符串总是有效的,并且总是形式为
\d+(\d+)?
,因此要么是一个整数,要么是两个用连字符分隔的整数。(如果不是这样,您可能希望使用自定义Java 7样式的比较器添加一些额外的检查/验证,以使其比Java 8样式的lambda更具可读性。)


.split(“-”[0]
/
.split(“-”[1]
将在连字符上拆分此字符串,并根据比较器采用第一个或最后一个整数。然后,它会将其转换为一个带有
integer.valueOf(…)
的整数,并将使用默认的整数比较内置
Integer1.compareTo(Integer2)

这是
列表吗?什么是实际产出?@Chandru Appaji如果这个答案对你有效,你应该接受并投票。