我正在尝试将HTMLstyle-attribute 的内容解析为Map.到目前为止这是我的代码.困扰我的是方法的冗余调用String::split.怎么可以这个优化?
final String style = "padding-left: 6px; font-weight: bold";
final Map<String, String> result = Arrays.stream(style.split(";")) //
.map(String::trim) //
.filter(s -> s.split(":").length <= 2) // invalid
.collect(Collectors.toMap(s -> s.split(":")[0].trim(),
s -> s.split(":").length > 1 ? s.split(":")[1].trim() : ""));
Run Code Online (Sandbox Code Playgroud)
您可以String通过调用split一次映射到数组,然后继续处理该数组:
final Map<String, String> result = Arrays.stream(style.split(";"))
.map(String::trim)
.map(s -> s.split(":"))
.filter(a -> a.length == 2)
.collect(Collectors.toMap(a -> a[0].trim(), a -> a[1].trim()));
Run Code Online (Sandbox Code Playgroud)
我删除了冗余s -> s.split(":").length > 1检查,因为过滤器已经消除了没有足够元素的数组.
我还假设过滤器应该要求数组恰好有2个元素.