2017-02-21 27 views
0

Я следующий код (не работает), ограничивающую карту списков, которая преобразовывается в формат JSON ...Используя цикл (или итерации) в определении карты должны быть преобразованы в формат JSON

ObjectMapper objectMapper = new ObjectMapper(); 
    //Set pretty printing of json 
    objectMapper.enable(SerializationFeature.INDENT_OUTPUT); 

    //Define map which will be converted to JSON 
    List<TimeSeriesRollup> dataPoints = null; 
    for(int i=1; i<24; i++){ 
    Long xVal = graphs2.get(i).get(0); 
    Long yVal = graphs2.get(i).get(1); 
    dataPoints = Stream.of(
      new TimeSeriesRollup(xVal, yVal)) 
      .collect(Collectors.toList()); 
    } 

    List<TimeSeriesGraph> dataInfo = Stream.of(
      new TimeSeriesGraph("test", dataPoints)) 
      .collect(Collectors.toList()); 


    //1. Convert List of Person objects to JSON 
    String arrayToJson = objectMapper.writeValueAsString(dataInfo); 
    return arrayToJson; 

желаемая функциональность кода что-то вроде этого ...

ObjectMapper objectMapper = new ObjectMapper(); 
    //Set pretty printing of json 
    objectMapper.enable(SerializationFeature.INDENT_OUTPUT); 

    //Define map which will be converted to JSON 
    List<TimeSeriesRollup> dataPoints = null; 
    dataPoints = Stream.of(
      new TimeSeriesRollup(xVal1, yVal1)) 
      new TimeSeriesRollup(xVal2, yVal2)) 
      new TimeSeriesRollup(xVal3, yVal3)) 
      new TimeSeriesRollup(xVal, yVal)) 
      new TimeSeriesRollup(xVal, yVal)) 
      new TimeSeriesRollup(xVal, yVal)) etc... 
      .collect(Collectors.toList()); 
    } 

    List<TimeSeriesGraph> dataInfo = Stream.of(
      new TimeSeriesGraph("test", dataPoints)) 
      .collect(Collectors.toList()); 


    //1. Convert List of Person objects to JSON 
    String arrayToJson = objectMapper.writeValueAsString(dataInfo); 
    return arrayToJson; 

Я хотел бы иметь возможность добавить столько «TimeSeriesRollup» ы, как хотелось бы, определенные переменной где-то в методе. Любые мысли или идеи по этому поводу? Любая другая информация, которую я могу предоставить?

+1

ли не то, что уже работает, если поместить запятые между каждым 'TimeSeriesRollup'? –

+0

Да. Оба кода технически работают, но я бы хотел использовать итерацию вместо объявления 30 элементов. @DM –

+0

, возможно, проверьте класс 'java.util.stream.Stream.Builder'? В документации говорится: «Это позволяет создавать поток, генерируя отдельные элементы и добавляя их в Builder». –

ответ

0

Насколько я понимаю, вопрос, что вам нужно, это индекс, чтобы составить поток из множества точек, так что вы можете начать с Intstream с требуемым диапазоном:

List<TimeSeriesRollup> dataPoints = 
       IntStream.range(0, 24) 
         .mapToObj(graph::get) 
         .map(point -> new TimeSeriesRollup(point.get(0), point.get(1))) 
         .collect(Collectors.toList()); 

Вы можете дать TimeSeriesRollup класс статический метод завода с, как ввести Point, в результате чего:

IntStream.range(0, 24) 
      .mapToObj(graph::get) 
      .map(TimeSeriesRollup::from) 
      .collect(toList()); 
+0

или конструктора, который принимает входной параметр 'Point', затем измените отображение на 'TimeSeriesRollup :: new' –

+0

. Я изучу этот вариант. Благодаря! –