您能帮我找出更好的解决方案吗?下一种情况:Web元素属性以字符串形式收集,格式为:
animation-delay:0s;animation-direction:normal;animation-duration:0s;
目标:创建属性及其值的映射
List<String> list = Arrays.stream(attributes.split(";")).collect(Collectors.toList());
Map<String, String> map = new HashMap<>();
for (String s : list) map.put(s.split(":")[0], s.split(":")[1]);
Arrays.stream(attributes.split(";"))
.distinct()
.map(entry -> entry.split(":"))
.collect(Collectors.toMap(entry -> entry[0], entry -> entry[1]));
这应该通过映射到某个表示键-值对的对象来完成,在最简单的情况下,它可以是字符串的列表/数组,然后使用Collectors.tomap
将这些对收集到Map
:
String attributes = "width:100px;height:100px;animation-delay:0s;"
+ "animation-direction:normal;animation-duration:0s;font-family:Arial;"
+ "font-family:Helvetica;font-family:sans-serif";
Map<String, String> map = Arrays.stream(attributes.split(";"))
.map(pair -> pair.split(":"))
.filter(arr -> arr.length > 1) // keep only key:value pairs
.collect(Collectors.toMap(
arr -> arr[0],
arr -> arr[1],
(v1, v2) -> String.join(", ", v1, v2) // merge values if needed
, LinkedHashMap::new // optional argument to keep insertion order
));
map.forEach((k, v) -> System.out.printf("%s: %s%n", k, v));
输出:
width: 100px
height: 100px
animation-delay: 0s
animation-direction: normal
animation-duration: 0s
font-family: Arial, Helvetica, sans-serif
也可以使用集合器收集映射。GroupingBy
+集合器。Mapping
+集合器。Joining
:
Map<String, String> map = Arrays.stream(attributes.split(";"))
.map(pair -> pair.split(":"))
.filter(arr -> arr.length > 1) // keep only key:value pairs
.collect(Collectors.groupingBy(
arr -> arr[0],
TreeMap::new, // optional, sort by keys
Collectors.mapping(arr -> arr[1], Collectors.joining(", "))
));
输出:
animation-delay: 0s
animation-direction: normal
animation-duration: 0s
font-family: Arial, Helvetica, sans-serif
height: 100px
width: 100px
这个问题不难,我已经用自己的方法解决了,但我想听听你的意见,也许有什么方法可以让这成为一个改进的选择?Java 8-11。
假设我有一个,我想替换一个值映射,例如: 顺便说一下,字符串也可以是多个字符
问题内容: 当我用Java进行操作时,我在stdout中得到了很好的输出。在不干预标准输出的情况下,如何在变量中获得相同的a字符串表示形式?像什么? 问题答案: 使用。 所有的亦是在此之后是做头套下。地图的格式在中描述。 返回此映射的字符串表示形式。字符串表示形式由键值映射列表组成,这些键值映射由地图视图的迭代器返回,并用大括号(“ {}”)括起来。相邻的映射用字符“,”(逗号和空格)分隔。每个键
在映射上分配一些默认值 我知道我需要在地图中添加值 问题是我的循环不起作用。我需要从地图中添加value2,基于从那里的位置或从地图中添加value2