用逗号对数量较大(超过一百万)的字母数字字符进行排序。但是java是根据第一个数字排序的,断言失败

问题描述 投票:0回答:1

我正在从 UI 值中读取值,并使用排序函数进行升序和降序排序并进行验证,但排序失败,因为您可以看到这些值是根据初始数字或 int 值进行排序的。 我如何修复或排序整个数字以及字母单词,即;未知、错误等。

public void sortFunction(List valuesFromUI){ 
    List<String> sortValues = new LinkedList<String>(); 
    sortValues.addAll(valuesFromUI)); 

    **Ascending values from UI:**
    [Unknown, Unknown, 13,125, 65,029, 280,552, 281,012, 987,072, 988,775, 1,250,203, 2,363,356, 4,042,563]

    **Descending values from UI: **
    [4,042,563, 2,363,356, 1,250,203, 988,775, 987,072, 281,012, 280,552, 65,029, 13,125, Unknown, Unknown]

    //Ascending
    Collections.sort(sortValues ); 
    System.out.println("[1,250,203, 13,125, 2,363,356, 280,552, 281,012, 4,042,563, 65,029, 987,072,         988,775, Unknown, Unknown");

    //Descending
    Collections.sort(sortValues, Collections.reverseOrder()); 
    System.out.println("[Unknown, Unknown, 988,775, 987,072, 65,029, 4,042,563, 281,012, 280,552, 2,363,356,     13,125, 1,250,203]");
 }
java sorting ui-automation
1个回答
0
投票

您需要编写自己的

Comparator
,它将包含带有千位分隔符的数字的字符串解析为整数,并识别您的特殊值
Error
Unknown

这段代码做了一些简化的假设:

  1. 您的所有数字都是正数,因此我们可以使用
    -1
    -2
    作为
    Unknown
    Error
    的哨兵值。
  2. 你所有的数字都是整数
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Locale;

public class ComparatorExample {
    public static void main(String[] args) {
        String[] data = {"Unknown", "Error", "13,125", "65,029", "280,552", "281,012", "987,072", "988,775", "1,250,203", "2,363,356", "4,042,563"};
        List<String> sortValues = new ArrayList<>(Arrays.asList(data));
        sortValues.sort(new MyComparator());
        System.out.println(sortValues);
    }
}

class MyComparator implements Comparator<String> {
    NumberFormat format = NumberFormat.getNumberInstance(Locale.US);

    @Override
    public int compare(String o1, String o2) {
        try {
            int n1 = value(o1);
            int n2 = value(o2);
            return n1 - n2;
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
    }

    private int value(String v) throws ParseException {
        if (v.equals("Unknown")) {
            return -1;
        } else if (v.equals("Error")) {
            return -2;
        } else {
            return format.parse(v).intValue();
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.