Java - объект ArrayList зацикливается на нескольких значениях и ключах - PullRequest
1 голос
/ 17 февраля 2020

Я новичок в Java, и я делаю Follow json, используя один массив с for для l oop и оператор if. Я хочу использовать dynamici c forl oop. Но я Я застрял с моей для l oop logi c part.

Вот моя java программа.

main. java

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;

public class SingleListForLoop {

  public static void main(String args[]) throws JsonProcessingException {

    List < Map < Object, Object >> dataProviderList = new LinkedList < > ();

    List < Object > yearList = new LinkedList < > ();

    yearList.add(2009);
    yearList.add(2010);
    yearList.add(2011);
    yearList.add(2012);
    yearList.add(2013);
    yearList.add(2014);

    yearList.add(21.4);
    yearList.add(31.3);
    yearList.add(15.6);
    yearList.add(34.8);
    yearList.add(20.1);
    yearList.add(27.3);

    yearList.add(20.3);
    yearList.add(43.1);
    yearList.add(19.8);
    yearList.add(34.7);
    yearList.add(24.4);
    yearList.add(21.9);

    for (int i = 0; i < (yearList.size() - (i + 6)); i++) {

      Map < Object, Object > dataProviderValueMap = new LinkedHashMap < > ();

      dataProviderValueMap.put("year", yearList.get(i));

      for (int j = i + 6; j <= (yearList.size() + (i - 12)); j++) {

        dataProviderValueMap.put("income", yearList.get(j));

        for (int k = 0; k <= (yearList.size() + (i - 6)); k++) {

          dataProviderValueMap.put("expenses", yearList.get(k));

          // for year 2014

          if (k == (yearList.size() - 1)) {

            dataProviderValueMap.put("dashLengthLine", 0);
            dataProviderValueMap.put("dashLengthColumn", 5);
            dataProviderValueMap.put("alpha", 0.5);
            dataProviderValueMap.put("additional", "(projection)");
          }

          // for year 2013
          if (k == (yearList.size() - 2)) {

            dataProviderValueMap.put("dashLengthLine", 5);
          }
        }
      }
      dataProviderList.add(dataProviderValueMap);
    }


    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.enable(SerializationFeature.INDENT_OUTPUT);

    String mapToJson = objectMapper.writeValueAsString(dataProviderList);
    System.out.println(mapToJson);

  }
}

Я хочу следующий вывод:

требуемый вывод:

[ {
  "year" : 2009,
  "income" : 21.4,
  "expenses" : 20.3
}, {
  "year" : 2010,
  "income" : 31.3,
  "expenses" : 43.1
}, {
  "year" : 2011,
  "income" : 15.6,
  "expenses" : 19.8
}, {
  "year" : 2012,
  "income" : 34.8,
  "expenses" : 34.7
}, {
  "year" : 2013,
  "income" : 20.1,
  "expenses" : 24.4,
  "dashLengthLine" : 5
}, {
  "year" : 2014,
  "income" : 27.3,
  "expenses" : 21.9,
  "dashLengthLine" : 0,
  "dashLengthColumn" : 5,
  "alpha" : 0.5,
  "additional" : "(projection)"
} ]

Как я могу сделать этот l oop более конкретным и улучшенным для l oop? я хочу использовать только один массив и для l oop с оператором if, имеющим Map внутри для l oop. спасибо за помощь!

...