Solución:
A no ser que Splitter
está haciendo algo de magia, el getTokenizeString
El método es obsoleto aquí. Puede realizar todo el procesamiento como una sola operación:
Map<String,String> map = Pattern.compile("\s*-\s*")
.splitAsStream(responseString.trim())
.map(s -> s.split("~", 2))
.collect(Collectors.toMap(a -> a[0], a -> a.length>1? a[1]: ""));
Usando la expresión regular s*-s*
como separador, está considerando el espacio en blanco como parte del separador, por lo que recorta implícitamente las entradas. Solo hay una inicial trim
operación antes de procesar las entradas, para asegurarse de que no haya espacios en blanco antes de la primera o después de la última entrada.
Luego, simplemente divida las entradas en un map
paso antes de reunirse en un Map
.
En primer lugar, no tienes que dividir lo mismo String
dos veces.
En segundo lugar, verifique la longitud de la matriz para determinar si hay un valor presente para una clave determinada.
HashMap<String, String> map=
list.stream()
.map(s -> s.split("~"))
.collect(Collectors.toMap(a -> a[0], a -> a.length > 1 ? a[1] : ""));
Esto es asumiendo que quiere poner la clave con un null
valor si una clave no tiene un valor correspondiente.
O puedes saltarte el list
variable :
HashMap<String, String> map1 =
MyClass.getTokenizeString(responseString, "-")
.stream()
.map(s -> s.split("~"))
.collect(Collectors.toMap(a -> a[0], a -> a.length > 1 ? a[1] : ""));