/**
 * 获取根据字母出现频率排序的字符串(出现频率低的排在前,频次相同根据字母从小到大排序,只限小写字母) aaddccdc ->2a3c3d -> dca
 * @param srcStr
 * @return
 */
public static String getOrderedStr1(String srcStr){
    if (srcStr==null || srcStr.isEmpty()){
        return "!error";
    }
    int length = srcStr.length();
    for (int i = 0; i < length; i++) {
        char charAt = srcStr.charAt(i);
        if (charAt < 'a' || charAt > 'z'){
            return "!error";
        }
    }
    // aaddccadc
    ArrayList<CustomerCharcterEntity> entityArrayList = new ArrayList<>();
    for (int i = 0; i < length; i++) {
        char charAtI = srcStr.charAt(i);
        int charAtICount=1;
        for (int j = i+1; j < length; j++) {
            char charAtJ = srcStr.charAt(j);
            if (charAtI==charAtJ){
                charAtICount++;
            }
        }
        CustomerCharcterEntity customerCharcterEntity = new CustomerCharcterEntity();
        UUID randomUUID = UUID.randomUUID();
        String toString = randomUUID.toString();
        customerCharcterEntity.setId(toString);
        customerCharcterEntity.setSrcCharacter(charAtI);
        customerCharcterEntity.setCharacterCount(charAtICount);
        entityArrayList.add(customerCharcterEntity);
    }
    ArrayList<CustomerCharcterEntity> entityArrayList1 = new ArrayList<>();
    for (int i = entityArrayList.size() - 1; i >= 0; i--) {
        CustomerCharcterEntity customerCharcterEntity = entityArrayList.get(i);
        entityArrayList1.add(customerCharcterEntity);
    }
    HashMap<Character, Integer> characterIntegerHashMap = new HashMap<>();
    for (CustomerCharcterEntity customerCharcterEntity : entityArrayList1) {
        Character srcCharacter = customerCharcterEntity.getSrcCharacter();
        Integer characterCount = customerCharcterEntity.getCharacterCount();
        characterIntegerHashMap.put(srcCharacter,characterCount);
    }
    ArrayList<CustomerCharcterEntity> charcterEntityArrayList = new ArrayList<>();
    characterIntegerHashMap.forEach((k,v)->{
        CustomerCharcterEntity customerCharcterEntity = new CustomerCharcterEntity();
        customerCharcterEntity.setSrcCharacter(k);
        customerCharcterEntity.setCharacterCount(v);
        charcterEntityArrayList.add(customerCharcterEntity);
    });
    charcterEntityArrayList.sort(new Comparator<CustomerCharcterEntity>() {
        @Override
        public int compare(CustomerCharcterEntity o1, CustomerCharcterEntity o2) {
            Character srcCharacter = o1.getSrcCharacter();
            Integer characterCount = o1.getCharacterCount();
            Integer characterCount1 = o2.getCharacterCount();
            Character srcCharacter1 = o2.getSrcCharacter();
            if (characterCount<characterCount1){
                if (srcCharacter < srcCharacter1){
                    return -1;
                }else if (srcCharacter > srcCharacter1){
                    return 1;
                }else {
                    return 0;
                }
            }else if (characterCount>characterCount1){
                if (srcCharacter < srcCharacter1){
                    return -1;
                }else if (srcCharacter > srcCharacter1){
                    return 1;
                }else {
                    return 0;
                }
            }else {
                if (srcCharacter < srcCharacter1){
                    return -1;
                }else if (srcCharacter > srcCharacter1){
                    return 1;
                }else {
                    return 0;
                }
            }
        }
    });
    StringBuilder stringBuilder = new StringBuilder();
    charcterEntityArrayList.forEach(e->{
        Character srcCharacter = e.getSrcCharacter();
        stringBuilder.append(srcCharacter);
    });
    String toString = stringBuilder.toString();
    return toString;
}
class CustomerCharcterEntity {
    private String id;
    private Character srcCharacter;
    private Integer characterCount;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public Character getSrcCharacter() {
        return srcCharacter;
    }
    public void setSrcCharacter(Character srcCharacter) {
        this.srcCharacter = srcCharacter;
    }
    public Integer getCharacterCount() {
        return characterCount;
    }
    public void setCharacterCount(Integer characterCount) {
        this.characterCount = characterCount;
    }
    @Override
    public String toString() {
        return "CustomerCharcterEntity{" +
                "id='" + id + '\'' +
                ", srcCharacter=" + srcCharacter +
                ", characterCount=" + characterCount +
                '}';
    }
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        CustomerCharcterEntity that = (CustomerCharcterEntity) o;
        return Objects.equals(id, that.id) &&
                Objects.equals(srcCharacter, that.srcCharacter) &&
                Objects.equals(characterCount, that.characterCount);
    }
    @Override
    public int hashCode() {
        return Objects.hash(id, srcCharacter, characterCount);
    }
}