排序某些数组的最佳方法

时间:2017-06-04 05:28:02

标签: java arrays

我有一些数组:

trade_prices[n]
trade_volumes[n]
trade_dates[n]
trade_tickers[n]

我希望按tickers排序,然后按dates排序。

我该如何对它们进行排序?

3 个答案:

答案 0 :(得分:8)

好像你应该重新考虑设计。我认为为这些属性创建一个类并拥有类类型的集合更好:

class Trade
{
    double price;
    double volume;
    Date date;
    String tickers;
}

然后为Comparator接口排序实现。创建类后的示例可以是:How to sort by two fields in Java?

如saka1029所述,另一种选择是使用Comparator.comparing Comparator.thenComparingset PATH=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\ set GH=C:\path\to\Git\2.13 set PATH=%GH%\bin;%GH%\usr\bin;%GH%\mingw64\bin;%PATH% 来加速类的对象。

答案 1 :(得分:3)

像这样定义内部类Trade

int n = 10;
int[] trade_prices = new int[n];
int[] trade_volumes = new int[n];
Date[] trade_dates = new Date[n];
String[] trade_tickers = new String[n];
// fill data...
class Trade {
    final int i; 
    Trade(int i) { this.i = i; } 
    int price() { return trade_prices[i]; } 
    int volume() { return trade_volumes[i]; } 
    Date date() { return trade_dates[i]; } 
    String ticker() { return trade_tickers[i]; }
}
Trade[] trades = IntStream.range(0, n)
    .mapToObj(Trade::new)
    .sorted(Comparator.comparing(Trade::ticker).thenComparing(Trade::date))
    .toArray(Trade[]::new);

然后您可以将第一个价格排序为trades[0].price()。 原始数组不会更改。

答案 2 :(得分:0)

创建一个包含构造函数和方法的类,并将数组声明为全局数组。您可以编写一个函数来对数组进行排序。