private static Object getJavaObject(Object avroObject) { Object javaObject; if (avroObject instanceof Utf8) { javaObject = avroObject.toString(); } else if (avroObject instanceof GenericArray) { javaObject = ((GenericArray<Object>) avroObject).stream() .map(element -> getJavaObject(element)) .collect(Collectors.toList()); } else if (avroObject instanceof Map) { javaObject = new LinkedHashMap<>(); for (Map.Entry<Object, Object> entry : ((Map<Object, Object>) avroObject).entrySet()) { ((Map<Object, Object>) javaObject).put(getJavaObject(entry.getKey()), getJavaObject(entry.getValue())); } } else if (avroObject instanceof GenericRecord) { int numberOfFields = ((GenericRecord) avroObject).getSchema().getFields().size(); javaObject = new ArrayList(numberOfFields); for (int i = 0; i < numberOfFields; i++) { ((ArrayList) javaObject).add(getJavaObject(((GenericRecord) avroObject).get(i))); } } else { javaObject = avroObject; } return javaObject; } }