Similar to this thread: https://www.b4x.com/android/forum/threads/convert-data-map-to-list.141527/
But I use a custom Type which I call KeyValueList.
I only tested this on B4J, it should also work in B4A too.
	
	
	
	
	
	
	
		
			
			
			
			
			
		
	
	
	
		
	
	
		
	
Example usage:
	
	
	
	
	
	
	
		
			
			
			
			
			
		
	
	
	
		
	
	
		
	
If we pass Map.Keys or Map.Values to a function which expect a List, we will get an error:
java.lang.ClassCastException: class anywheresoftware.b4a.objects.collections.Map$IterableMap cannot be cast to class java.util.List (anywheresoftware.b4a.objects.collections.Map$IterableMap is in unnamed module of loader 'app'; java.util.List is in module java.base of loader 'bootstrap')
I can also create another function that expect a KeyValueList:
	
	
	
	
	
	
	
		
			
			
			
			
			
		
	
	
	
		
	
	
		
	
			
			But I use a custom Type which I call KeyValueList.
I only tested this on B4J, it should also work in B4A too.
			
				B4X:
			
		
		
		Type KeyValueList (Keys As List, Values As List)
Public Sub ConvertMap2KeyValueList (obj As Map) As KeyValueList
    Dim Keys As List
    Dim Values As List
    Keys.Initialize
    Values.Initialize
    For Each key As String In obj.Keys
        Keys.Add(key)
        Values.Add(obj.Get(key))
    Next
    Return CreateKeyValueList(Keys, Values)
End Sub
Public Sub CreateKeyValueList (Keys As List, Values As List) As KeyValueList
    Dim t1 As KeyValueList
    t1.Initialize
    t1.Keys = Keys
    t1.Values = Values
    Return t1
End SubExample usage:
			
				B4X:
			
		
		
		Dim data As Map = Utility.RequestData(Request) ' a map of data from Http Post body as JSON
Dim KVL As KeyValueList = Utility.ConvertMap2KeyValueList(data)
Dim M1 As Map = Main.UserList.QueryFirst(KVL.Keys, KVL.Values)
' Dim M1 As Map = Main.UserList.QueryFirst(data.Keys, data.Values) ' <-- Error
' Note: QueryFirst is a function in MinimaList
' Query first item where key and value list matched
Public Sub QueryFirst (keys As List, values As List) As Map
    ' Code
End SubIf we pass Map.Keys or Map.Values to a function which expect a List, we will get an error:
java.lang.ClassCastException: class anywheresoftware.b4a.objects.collections.Map$IterableMap cannot be cast to class java.util.List (anywheresoftware.b4a.objects.collections.Map$IterableMap is in unnamed module of loader 'app'; java.util.List is in module java.base of loader 'bootstrap')
I can also create another function that expect a KeyValueList:
			
				B4X:
			
		
		
		Public Sub QueryFirst2 (data As KeyValueList) As Map
    ' Code
End Sub
' Usage:
Dim M1 As Map = Main.UserList.QueryFirst2(KVL)
			
				Last edited: