public MaterializedRow(int precision, List<Object> values) { checkArgument(precision > 0, "Need at least one digit of precision"); this.precision = precision; this.values = (List<Object>) processValue(precision, values); }
private static Object processValue(int precision, Object value) { if (value instanceof Double) { return new ApproximateDouble(((Double) value), precision); } if (value instanceof Float) { return new ApproximateFloat(((Float) value), precision); } if (value instanceof List) { return ((List<?>) value).stream() .map(element -> processValue(precision, element)) .collect(toList()); } if (value instanceof Map) { Map<Object, Object> map = new HashMap<>(); for (Entry<Object, Object> entry : ((Map<Object, Object>) value).entrySet()) { map.put(processValue(precision, entry.getKey()), processValue(precision, entry.getValue())); } return map; } if (value instanceof byte[]) { return ByteBuffer.wrap((byte[]) value); } return value; }
public MaterializedRow(int precision, List<Object> values) { checkArgument(precision > 0, "Need at least one digit of precision"); this.precision = precision; this.values = (List<Object>) processValue(precision, values); }
private static Object processValue(int precision, Object value) { if (value instanceof Double || value instanceof Float) { return new ApproximateDouble(((Number) value).doubleValue(), precision); } if (value instanceof Number) { return ((Number) value).longValue(); } if (value instanceof List) { return ((List<?>) value).stream() .map(element -> processValue(precision, element)) .collect(toList()); } if (value instanceof Map) { Map<Object, Object> map = new HashMap<>(); for (Entry<Object, Object> entry : ((Map<Object, Object>) value).entrySet()) { map.put(processValue(precision, entry.getKey()), processValue(precision, entry.getValue())); } return map; } return value; }