按前 6 个字符对字符串进行排序

Sorting a String by its 6 first characters

我的 ID 格式如下:XXXXXXYYY00000

我想要做的是获取一个按字母顺序排列的字符串,该字符串由前 6 个字符(6 个 x(它们可以是任何字符))组成,每个新 ID 由换行符分隔

例如:

AOPSIKPMI23495 会先于 BWLMBEPMI00001

到目前为止我所拥有的是:

String = String + this.ID + "\n";

而且我不知道如何处理我的问题才能解决它。

我的问题如下:如何仅按前 6 个字符按字母顺序排列我的 ID(这意味着如果前 6 个字符有联系,它仍然不应该用接下来的 3 个字符来解决)还保留着我的 String ?

您可以简单地实现一个比较器来比较前 6 个字符:

class FirstSixCharComparator implements Comparator<String> {
    @Override
    public int compare(String a, String b) {
        return a.substring(0,6)compareTo(b.substring(0,6));
    }
}

然后使用比较器进行排序:

Collections.sort(list, new FirstSixCharComparator<String>());   //for collections    
Arrays.sort(array, new FirstSixCharComparator<String>());       //for arrays

您可以按前 6 个字符对列表进行排序,然后使用 Collectors.joining"\n" 分隔符分隔每个字符串。

String result = myList.stream().sorted(Comparator.comparing(e -> e.substring(0,6)))
                               .collect(Collectors.joining("\n"));

这段代码应该可以解决您的问题,如果不能,那么我们可以编写比较器之类的东西来满足您的任何要求。

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;

public class Sample {

    public static void main(String[] args) {
        List<String> words = new ArrayList<String>();
        words.add("AOPSIKDDD23495");
        words.add("BWLMBEPMI00001");
        Collections.sort(words);
        System.out.println(words);      
    }

}