2017-06-04 102 views
0

我有一些阵:最好的办法

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

,我想通过tickers然后dates对它们进行排序。

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

+0

它可以通过for循环完成。但是:1-我不知道(确切地说)和2-我不知道这是否是最好的方法。 –

+0

也许它可以通过一个接一个的循环来完成。而不是相互之间的两个循环。我的意思是有一次,我可以按日期和其他时间按代理人排序 –

回答

8

好像你应该重新思考设计。我想创建这些属性的类和具有类类型的集合更好:

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

然后进行排序实现Comparator接口。一个例子,创建后的类可以是:How to sort by two fields in Java?

另一种选择,如saka1029提到的,是对类的对象的蒸汽使用Comparator.comparingComparator.thenComparingComparator's functions

+1

@Mohammad_Hosein - 这是否帮助您解决问题? –

+0

嗨,我正在努力。我是java新手(也是在编程中),所以需要时间 –

0

用它中的构造函数和方法做一个类,并将你的数组声明为全局的。你可以写一个函数来排序你的数组。

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()。 原始数组不变。

+1

“Comparator.comparing”的使用很不错,但是在不检查索引和空值的情况下访问外部数组的类实现是一个非常糟糕的做法IMO –