@@ -211,7 +211,6 @@ public Chain<T> compact(final T falsyValue) {
211211 }
212212
213213 @ Override
214- @ SuppressWarnings ("unchecked" )
215214 public Chain flatten () {
216215 return new Chain <>(Underscore .flatten (value ()));
217216 }
@@ -966,9 +965,7 @@ public static <T> List<T> fill(List<T> list, T item) {
966965 }
967966
968967 public static <T > T [] fill (T [] array , T item ) {
969- for (int i = 0 ; i < array .length ; i ++) {
970- array [i ] = item ;
971- }
968+ Arrays .fill (array , item );
972969 return array ;
973970 }
974971
@@ -1763,7 +1760,6 @@ public static <T> T remove(final Map<String, Object> object, final String path)
17631760 return baseGetOrSetOrRemove (object , path , null , OperationType .REMOVE );
17641761 }
17651762
1766- @ SuppressWarnings ("unchecked" )
17671763 public static Map <String , Object > rename (
17681764 final Map <String , Object > map , final String oldKey , final String newKey ) {
17691765 Map <String , Object > outMap = newLinkedHashMap ();
@@ -1842,7 +1838,6 @@ private static Object makeObjectForSetValue(
18421838 return result ;
18431839 }
18441840
1845- @ SuppressWarnings ("unchecked" )
18461841 public static Map <String , Object > update (
18471842 final Map <String , Object > map1 , final Map <String , Object > map2 ) {
18481843 Map <String , Object > outMap = newLinkedHashMap ();
@@ -2363,7 +2358,6 @@ public static Map<String, Object> fromXmlMap(final String xml) {
23632358 return fromXmlMap (xml , Xml .FromType .FOR_CONVERT );
23642359 }
23652360
2366- @ SuppressWarnings ("unchecked" )
23672361 public static Map <String , Object > fromXmlMap (final String xml , final Xml .FromType fromType ) {
23682362 final Object object = Xml .fromXml (xml , fromType );
23692363 return getStringObjectMap (object );
@@ -2411,7 +2405,6 @@ public Object fromJson() {
24112405 return Json .fromJson (getString ().get ());
24122406 }
24132407
2414- @ SuppressWarnings ("unchecked" )
24152408 public static Map <String , Object > fromJsonMap (final String string ) {
24162409 final Object object = Json .fromJson (string );
24172410 return getStringObjectMap (object );
@@ -2669,7 +2662,6 @@ private static Object makeObjectSelfClose(Object value, String newValue) {
26692662 return result ;
26702663 }
26712664
2672- @ SuppressWarnings ("unchecked" )
26732665 public static Map <String , Object > replaceEmptyValueWithNull (Map <String , Object > map ) {
26742666 if (map == null || map .isEmpty ()) {
26752667 return null ;
@@ -2698,7 +2690,6 @@ private static Object makeObjectEmptyValue(Object value) {
26982690 return result ;
26992691 }
27002692
2701- @ SuppressWarnings ("unchecked" )
27022693 public static Object replaceEmptyValueWithEmptyString (Map <String , Object > map ) {
27032694 if (map .isEmpty ()) {
27042695 return "" ;
@@ -2728,7 +2719,6 @@ private static Object makeObjectEmptyString(Object value) {
27282719 return result ;
27292720 }
27302721
2731- @ SuppressWarnings ("unchecked" )
27322722 public static Map <String , Object > forceAttributeUsage (Map <String , Object > map ) {
27332723 Map <String , Object > outMap = newLinkedHashMap ();
27342724 for (Map .Entry <String , Object > entry : map .entrySet ()) {
@@ -2760,7 +2750,6 @@ private static Object makeAttributeUsage(Object value) {
27602750 return result ;
27612751 }
27622752
2763- @ SuppressWarnings ("unchecked" )
27642753 public static Map <String , Object > replaceNullWithEmptyValue (Map <String , Object > map ) {
27652754 Map <String , Object > outMap = newLinkedHashMap ();
27662755 for (Map .Entry <String , Object > entry : map .entrySet ()) {
@@ -2790,7 +2779,6 @@ private static Object makeReplaceNullValue(Object value) {
27902779 return result ;
27912780 }
27922781
2793- @ SuppressWarnings ("unchecked" )
27942782 public static Map <String , Object > replaceEmptyStringWithEmptyValue (Map <String , Object > map ) {
27952783 Map <String , Object > outMap = newLinkedHashMap ();
27962784 for (Map .Entry <String , Object > entry : map .entrySet ()) {
@@ -2821,7 +2809,6 @@ private static Object makeReplaceEmptyString(Object value) {
28212809 return result ;
28222810 }
28232811
2824- @ SuppressWarnings ("unchecked" )
28252812 public static Map <String , Object > replaceFirstLevel (Map <String , Object > map ) {
28262813 return replaceFirstLevel (map , 0 );
28272814 }
@@ -2860,6 +2847,31 @@ private static Object makeReplaceFirstLevel(Object value, int level) {
28602847 return result ;
28612848 }
28622849
2850+ public static Map <String , Object > deepCopyMap (Map <String , Object > map ) {
2851+ Map <String , Object > outMap = newLinkedHashMap ();
2852+ for (Map .Entry <String , Object > entry : map .entrySet ()) {
2853+ outMap .put (entry .getKey (), makeDeepCopyMap (entry .getValue ()));
2854+ }
2855+ return outMap ;
2856+ }
2857+
2858+ @ SuppressWarnings ("unchecked" )
2859+ private static Object makeDeepCopyMap (Object value ) {
2860+ final Object result ;
2861+ if (value instanceof List ) {
2862+ List <Object > values = newArrayList ();
2863+ for (Object item : (List ) value ) {
2864+ values .add (item instanceof Map ? deepCopyMap ((Map ) item ) : item );
2865+ }
2866+ result = values ;
2867+ } else if (value instanceof Map ) {
2868+ result = deepCopyMap ((Map ) value );
2869+ } else {
2870+ result = value ;
2871+ }
2872+ return result ;
2873+ }
2874+
28632875 public static long gcd (long value1 , long value2 ) {
28642876 if (value1 == 0 ) {
28652877 return value2 ;
@@ -2941,6 +2953,12 @@ public static Builder fromXml(final String xml) {
29412953 return builder ;
29422954 }
29432955
2956+ public static Builder fromMap (final Map <String , Object > map ) {
2957+ final Builder builder = new Builder ();
2958+ deepCopyMap (map ).forEach (builder .data ::put );
2959+ return builder ;
2960+ }
2961+
29442962 public String toJson () {
29452963 return Json .toJson (data );
29462964 }
0 commit comments