我想拆分下面的字符串并将其存储到 HashMap 中。
String responseString = "name~peter-add~mumbai-md~v-refNo~";
首先,我使用定界符连字符 (-) 拆分字符串并将其存储到 ArrayList 中,如下所示:
public static List<String> getTokenizeString(String delimitedString, char separator) {
final Splitter splitter = Splitter.on(separator).trimResults();
final Iterable<String> tokens = splitter.split(delimitedString);
final List<String> tokenList = new ArrayList<String>();
for(String token: tokens){
tokenList.add(token);
}
return tokenList;
}
List<String> list = MyClass.getTokenizeString(responseString, "-");
然后使用以下代码使用流将其转换为 HashMap。
HashMap<String, String> = list.stream()
.collect(Collectors.toMap(k ->k.split("~")[0], v -> v.split("~")[1]));
流收集器不工作,因为没有针对 refNo 的值。
如果我在 ArrayList 中有偶数个元素,它可以正常工作。
有什么办法可以解决这个问题吗?还建议我如何使用流来完成这两个任务(我不想使用 getTokenizeString() 方法)使用流 java 8。
原文由 Sangam Belose 发布,翻译遵循 CC BY-SA 4.0 许可协议
除非
Splitter
正在做任何魔术,否则 ---getTokenizeString
方法在这里已过时。您可以将整个处理作为一个操作来执行:通过使用正则表达式
\s*-\s*
作为分隔符,您将空格视为分隔符的一部分,因此隐式地修剪了条目。在处理条目之前只有一个初始trim
操作,以确保在第一个条目之前或最后一个条目之后没有空格。然后,只需将条目拆分为
map
步骤,然后再收集到Map
。