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如果这个答案对你有效,你应该接受并投票。