簡體   English   中英

我將如何對在 Java 中格式化為高度的字符串數組列表進行排序?

[英]How would I sort an arraylist of strings that's formatted as a height in java?

    ArrayList<String> heights = new ArrayList<String>();

    Comparator<String> setTableNumber = new Comparator<String>(){
          @Override
          public int compare(String o1, String o2){{       
                 return (o1).compareTo(o2);}}};

    Collections.sort(players, setTableNumber);

假設高度包含這樣的字符串 ["5'11"", "6'11"","4'2""]

我希望它從高到低排序,如 ["6'11"","5'11"","4'2""]

我正在考慮使用 .split('),將字符串轉換為整數,然后將英尺乘以 12,然后將其添加到第二個字符串(在我修剪掉“之后”)並將兩個值作為英寸進行比較。但是有有更好的方法嗎?

提前致謝。

就個人而言,我會預先將String值轉換為int (英寸),這使您有機會在對話期間處理可能的錯誤。

ArrayList<String> heights = new ArrayList<String>();
heights.add("5'11");
heights.add("6'11");
heights.add("5'2");
heights.add("4'2");

Comparator<String> setTableNumber = new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
        Integer lhs = convertToInches(o1);
        Integer rhs = convertToInches(o2);
        if (lhs == null) {
            return 1;
        } else if (rhs == null) {
            return -1;
        }
        return lhs.compareTo(rhs);
    }

    protected Integer convertToInches(String value) {
        String parts[] = value.split("'");
        if (parts.length != 2) {
            return null;
        }
        return (Integer.parseInt(parts[0]) * 12) + Integer.parseInt(parts[1]);
    }
};

Collections.sort(heights, setTableNumber);
System.out.println(heights);

哪個打印

[4'2, 5'2, 5'11, 6'11]

此工作流會將“壞”值放在列表的末尾,例如...

ArrayList<String> heights = new ArrayList<String>();
heights.add("Worse");
heights.add("5'11");
heights.add("6'11");
heights.add("5'2");
heights.add("Bad");
heights.add("4'2");

會產生

[4'2, 5'2, 5'11, 6'11, Worse, Bad]

但就個人而言,我會在嘗試對列表進行排序之前處理這個問題(通過將值轉換為int )。 然后,您可以在要打印時對int值進行一些額外的格式化

嘗試這個。

public static void main(String[] args) {
    List<String> heights = List.of("5'11\"", "6'11\"","4'2\"");

    List<String> sorted = heights.stream()
        .map(s -> new Object() {
            String feetInch = s;
            int inch;
            {
                String[] f = feetInch.replaceFirst("\"", "").split("'");
                inch = Integer.parseInt(f[0]) * 12 + Integer.parseInt(f[1]);
            }
        })
        .sorted(Collections.reverseOrder(Comparator.comparing(obj -> obj.inch)))
        .map(obj -> obj.feetInch)
        .toList();

    System.out.println(sorted);
}

輸出:

[6'11", 5'11", 4'2"]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM