private Map<Object, Object> deserializeMap( ModuleDescriptor module, MapType mapType, MapValue value ) throws IOException { Map<Object, Object> map = new LinkedHashMap<>( value.size() ); for( Map.Entry<Value, Value> entry : value.entrySet() ) { Object key = doDeserialize( module, mapType.keyType(), entry.getKey() ); Object val = doDeserialize( module, mapType.valueType(), entry.getValue() ); map.put( key, val ); } return map; }
Optional<Node> valueNode = JavaxXml.firstChildElementNamed( element, "value" ) .flatMap( JavaxXml::firstStateChildNode ); Object key = doDeserialize( module, mapType.keyType(), keyNode ); Object value = valueNode.map( node -> doDeserialize( module, mapType.valueType(), node ) ) .orElse( null );
/** * Map deserialization. * * {@literal JsonObject}s are deserialized to {@literal Map<String, ?>}. * {@literal JsonArray}s of key/value {@literal JsonObject}s are deserialized to {@literal Map<?, ?>}. */ private Map<?, ?> deserializeMap( ModuleDescriptor module, MapType mapType, JsonStructure json ) { if( json.getValueType() == JsonValue.ValueType.OBJECT ) { JsonObject object = (JsonObject) json; return object.entrySet().stream() .map( entry -> new AbstractMap.SimpleImmutableEntry<>( entry.getKey(), doDeserialize( module, mapType.valueType(), entry.getValue() ) ) ) .collect( toMapWithNullValues( LinkedHashMap::new ) ); } if( json.getValueType() == JsonValue.ValueType.ARRAY ) { JsonArray array = (JsonArray) json; return array.stream() .map( JsonObject.class::cast ) .map( entry -> new AbstractMap.SimpleImmutableEntry<>( doDeserialize( module, mapType.keyType(), entry.get( "key" ) ), doDeserialize( module, mapType.valueType(), entry.get( "value" ) ) ) ) .collect( toMapWithNullValues( LinkedHashMap::new ) ); } throw new SerializationException( "Don't know how to deserialize " + mapType + " from " + json ); }
/** * Map deserialization. * * {@literal JsonObject}s are deserialized to {@literal Map<String, ?>}. * {@literal JsonArray}s of key/value {@literal JsonObject}s are deserialized to {@literal Map<?, ?>}. */ private Map<?, ?> deserializeMap( ModuleDescriptor module, MapType mapType, JsonStructure json ) { if( json.getValueType() == JsonValue.ValueType.OBJECT ) { JsonObject object = (JsonObject) json; return object.entrySet().stream() .map( entry -> new AbstractMap.SimpleImmutableEntry<>( entry.getKey(), doDeserialize( module, mapType.valueType(), entry.getValue() ) ) ) .collect( toMapWithNullValues( LinkedHashMap::new ) ); } if( json.getValueType() == JsonValue.ValueType.ARRAY ) { JsonArray array = (JsonArray) json; return array.stream() .map( JsonObject.class::cast ) .map( entry -> new AbstractMap.SimpleImmutableEntry<>( doDeserialize( module, mapType.keyType(), entry.get( "key" ) ), doDeserialize( module, mapType.valueType(), entry.get( "value" ) ) ) ) .collect( toMapWithNullValues( LinkedHashMap::new ) ); } throw new SerializationException( "Don't know how to deserialize " + mapType + " from " + json ); }
if( mapType.keyType() instanceof ValueCompositeType )
if( mapType.keyType() instanceof ValueCompositeType )
@Test public void maps() { assertThat( valueTypeFactory.valueTypeOf( module, TreeMap.class ), instanceOf( MapType.class ) ); HashMap<String, Integer> map = new HashMap<>(); ValueType mapValueType = valueTypeFactory.valueTypeOf( module, map ); assertThat( mapValueType, instanceOf( MapType.class ) ); assertThat( ( (MapType) mapValueType ).keyType(), equalTo( ValueType.OBJECT ) ); assertThat( ( (MapType) mapValueType ).valueType(), equalTo( ValueType.OBJECT ) ); }