Самый классический способ сериализации вышеуказанного списка POJO
экземпляров состоит в том, чтобы сериализовать его как массив.
import com.fasterxml.jackson.databind.ObjectMapper;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
public class MapperApp {
public static void main(String[] args) throws Exception {
List<CoefficientPerQuantityParameter> coefficients = Arrays.asList(new CoefficientPerQuantityParameter(2, BigDecimal.valueOf(0.9)),
new CoefficientPerQuantityParameter(10, BigDecimal.valueOf(0.8)),
new CoefficientPerQuantityParameter(40, BigDecimal.valueOf(0.7)));
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(coefficients));
}
}
Вышеупомянутый код печатает:
[ {
"hour" : 2,
"cost" : 0.9
}, {
"hour" : 10,
"cost" : 0.8
}, {
"hour" : 40,
"cost" : 0.7
} ]
Если вы хотите иметьструктура, где hour
- это ключ, а cost
- это значение, которое я предлагаю преобразовать в данный массив в Map
вручную и сериализовать результат.
import com.fasterxml.jackson.databind.ObjectMapper;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class MapperApp {
public static void main(String[] args) throws Exception {
List<CoefficientPerQuantityParameter> coefficients = Arrays.asList(new CoefficientPerQuantityParameter(2, BigDecimal.valueOf(0.9)),
new CoefficientPerQuantityParameter(10, BigDecimal.valueOf(0.8)),
new CoefficientPerQuantityParameter(40, BigDecimal.valueOf(0.7)));
Map<Integer, BigDecimal> map = coefficients.stream()
.collect(Collectors.toMap(CoefficientPerQuantityParameter::getHour, CoefficientPerQuantityParameter::getCost));
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(map));
}
}
Выше кода печатается:
{
"2" : 0.9,
"40" : 0.7,
"10" : 0.8
}