Java 使用以下条件对字符串的arraylist排序?

Java 使用以下条件对字符串的arraylist排序?,java,Java,我有一个字符串数组列表,格式如下: {T1,C1,C2,T2,C3,T3,A1,T4,G1,A2,G2,A3,T5,C4,C5,T6,A4,T7,T8,C6,T9,A5,T10,G3,A6,A7,A8,C7,C8,T11,T12,C9,A9,$1,G4,A10,C11,A11,A12,A13,A13,T14,C12,T15,C13,C14,G5,G6,C15}} 我想将此arraylist排序为以下内容: {$1,A1,A2…A10,A11,…C1,C2…C14…} 但是,当我使用Collect

我有一个字符串数组列表,格式如下:

{T1,C1,C2,T2,C3,T3,A1,T4,G1,A2,G2,A3,T5,C4,C5,T6,A4,T7,T8,C6,T9,A5,T10,G3,A6,A7,A8,C7,C8,T11,T12,C9,A9,$1,G4,A10,C11,A11,A12,A13,A13,T14,C12,T15,C13,C14,G5,G6,C15}}

我想将此arraylist排序为以下内容:

{$1,A1,A2…A10,A11,…C1,C2…C14…}

但是,当我使用
Collections.sort()
时,结果是:

{$1、A1、A10、A11、A12、A13、A14、A2、A3、A4、A5、A6、A7、A8、A9、C1、C10、C11、C12、C13、C14、C15、C2、C3、C4、C5、C6、C7、C8、C9、G1、G2、G3、G5、G6、T1、T10、T11、T12、T13、T15、T2、T3、T4、T5、T6、T6、T7、T8}}


在A14之后是A2。那么有没有办法解决这个问题呢?非常感谢

您必须创建自己的
比较器
对象,以便按照默认顺序以外的其他顺序进行排序。当您不提供自己的比较器时,字符串将按词汇顺序排序。您可以使用新的
List
方法,而不是
Collection.sort

myList.sort(new MyComparator());
MyComparator
Comparator
的一个实例:

class MyComparator implements Comparator<String> {
   ...
}
类MyComparator实现比较器{
...
}
您必须实现方法
compareTo

您可以使用方法链定义排序标准。将第一个比较定义为第一个字符的
字符
排序,然后将第二个比较定义为剩余子字符串的
整数
排序:

String[] arr = {"T1", "C1", "C2", "T2", "C3", "T3", "A1", "T4", "G1", "A2", "G2", "A3", "T5",
    "C4", "C5", "T6", "A4", "T7", "T8", "C6", "T9", "A5", "T10", "G3", "A6", "A7", "A8", "C7",
    "C8", "T11", "T12", "C9", "A9", "$1", "G4", "A10", "C10", "C11", "A11", "A12", "A13",
    "A14", "T13", "T14", "C12", "T15", "C13", "C14", "G5", "G6", "C15"};
Arrays.sort(arr, Comparator.<String, Character>comparing(s -> s.charAt(0))
    .thenComparingInt(s -> Integer.parseInt(s.substring(1))));
System.out.println(Arrays.toString(arr));

之所以得到这个结果,是因为Collections.sort()在本例中是按字母顺序排序的,您必须编写一个自定义比较器来实现不同的排序。这里有一些例子:非常感谢!这真的很有帮助!
[$1, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, G1, G2, G3, G4, G5, G6, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15]