我有我拆分為哈希映射的字串
String myStrFromUser = "app0=aaa,aaa,app1=ccc,ddd,app3=ddd,app4=iii,ddd,qqq,www,iii";
private static HashMap<String, List<String>> myMap = = new HashMap<>();
Arrays.stream(myStrFromUser.split("(,(?=[A-Za-z0-9]*=[^A-Za-z0-9]*))"))
.map(String::trim)
.map(s -> s.split("="))
.collect(Collectors.toMap(str -> s[0], str -> str[1].split(",")))
.forEach((key, value) -> myMap.put(key, Arrays.asList(value)) );
問題是我喜歡防止將重復值插入到新值中 ArrayList<>(Arrays.asList(value))
例如 :
app0=aaa,aaa
包含重復項,所以我喜歡它只有 1 個“aaa” ArrayList<>(Arrays.asList(value))
uj5u.com熱心網友回復:
我想這就是你要找的。
toMap像你一樣繼續這個部分- 但是對于值,只需創建一個新流,在逗號上拆分并使用 distinct 轉換為串列以消除重復項。
- 我建議
list結束,set因為集合不能被索引,因為它們是無序的。如果這無關緊要,請轉換為集合并洗掉不同的呼叫。并將地圖目標更改為Set<String>
String myStrFromUser =
"app0=aaa,aaa,app1=ccc,ddd,app3=ddd,app4=iii,ddd,qqq,www,iii";
Map<String, List<String>> myMap = Arrays.stream(myStrFromUser
.split("(,(?=[A-Za-z0-9]*=[^A-Za-z0-9]*))"))
.map(String::trim).map(s -> s.split("="))
.collect(Collectors.toMap(str -> str[0], str -> Arrays
.stream(str[1].split(",")).distinct().collect(Collectors.toList())));
myMap.entrySet().forEach(System.out::println);
印刷
app0=[aaa]
app1=[ccc, ddd]
app4=[iii, ddd, qqq, www]
app3=[ddd]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/336991.html
