比较Array Java中的股票价值

时间:2017-06-26 18:54:23

标签: java arrays json

我设法在Eclipse中用JSON打印这个网站

  

https://www.quandl.com/api/v3/datasets/SSE/HYQ.json?start_date=2017-01-01&end_date=2017-01-31

如您所见,我们有一个数组,其中包含某个公司的股票价值。该数组的长度为22.例如:

data-id="example-id" th:attr="data-id=${car.id}"

我的任务是检查哪一个具有更大的值。比如,检查89.13是否大于89.22?不,因此检查是否89.22>比86.77,没有等等。然后打印出来,在哪个日期是最大的价值。问题是在Java中检查它。我不知道如何比较这3个(更不用说22个)

编辑:逻辑对我来说很清楚,我的问题是在Java中解决这个问题。上面给出的这3个例子很不错。

这是我的代码:

["2017-01-27",89.13,87.611,88.18,87.699,750] //Array index 2
["2017-01-26",89.22,87.699,87.699,88.315,190]//Array index 3      
["2017-01-31",86.77,84.312,84.32,84.81,1205]//Array index 0

}

3 个答案:

答案 0 :(得分:2)

JSON数组的元素是 JSON元素。由于 JSON元素可以是JSON数组,因此JSON数组可以包含JSON数组作为其元素。

这样的事情会做到:

JSONArray array = dataset.getJSONArray("data");

// Save the first array's values
String biggestDate = array.get(0).get(0);   // index 0 is the date
double biggest     = array.get(0).get(1);   // index 1 is the stock price

// Iterate over all arrays and update biggest
for (int i = 0; i < 22; i++) {
    JSONArray arrayI = array.get(i);
    if (arrayI.get(1) > biggest) {
        biggest     = arrayI.get(1);   // updating biggest
        biggestDate = arrayI.get(0);   // updating biggest's date
    }
}

return biggestDate;

注意:未经测试!

  • 当然,不要使用22和其他硬编码常量
  • 为简单起见,请使用double,使用BigDecimal

答案 1 :(得分:1)

array.get(0).get(0)对你有用吗? 对我而言。我不得不解析:

    Optional<String> maxRow = array.toList().stream().map(Object::toString).max(new Comparator<String>() {      @Override       public int compare(String o1, String o2) {
        return Double.valueOf(o1.split(",")[1]).compareTo(Double.valueOf(o2.split(",")[1]));        }
    });

    System.out.println("Max row: " + maxRow.get());

产生了“最大”行:

最大行:[2017-01-26,89.22,87.699,87.699,88.315,190.0]

答案 2 :(得分:1)

实施以下方法。

private static String getDateWithMaxValue(JSONArray array) throws JSONException {
   JSONArray stockData;
   String dateWithMaxValue = "";
   double maxValue = Double.MIN_VALUE;
   for (int i = 0; i < array.length(); i++) {
      stockData = array.getJSONArray(i);
      if (stockData.get(1) instanceof Double) {
         if (((Double) stockData.get(1)).doubleValue() > maxValue) {
            maxValue = ((Double) stockData.get(1)).doubleValue();
            if (stockData.get(0) instanceof String) {
               dateWithMaxValue = (String) stockData.get(0);
            }
         }
      }
   }
   return dateWithMaxValue;
}

只需添加通话

即可
System.out.println(getDateWithMaxValue(array));
中的

以索引1处的最大值打印日期,其中 array 是您已声明的JSONArray。

(代码测试并返回日期2017-01-26,这是正确的)