split string and store it into HashMap java 8
Unless Splitter
is doing any magic, the getTokenizeString
method is obsolete here. You can perform the entire processing as a single operation:
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]: ""));
By using the regular expression \s*-\s*
as separator, you are considering white-space as part of the separator, hence implicitly trimming the entries. There’s only one initial trim
operation before processing the entries, to ensure that there is no white-space before the first or after the last entry.
Then, simply split the entries in a map
step before collecting into a Map
.
First of all, you don't have to split the same String
twice.
Second of all, check the length of the array to determine if a value is present for a given key.
HashMap<String, String> map=
list.stream()
.map(s -> s.split("~"))
.collect(Collectors.toMap(a -> a[0], a -> a.length > 1 ? a[1] : ""));
This is assuming you want to put the key with a null
value if a key has no corresponding value.
Or you can skip the 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] : ""));