Java 避免Lambda中的冗余函数调用
我试图将Java 避免Lambda中的冗余函数调用,java,lambda,Java,Lambda,我试图将HTMLstyle属性的内容解析为Map。这是到目前为止我的代码。困扰我的是String::split方法的冗余调用。如何对其进行优化 final String style = "padding-left: 6px; font-weight: bold"; final Map<String, String> result = Arrays.stream(style.split(";")) // .map(String::trim) //
HTML
style属性的内容解析为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() : ""));
final String style=“左侧填充:6px;字体重量:粗体”;
最终映射结果=Arrays.stream(style.split(“;”))//
.map(字符串::trim)//
.filter(s->s.split(“:”).length s.split(“:”)[0]。trim(),
s->s.split(“:”)。长度>1?s.split(“:”[1]。修剪():”);
您可以通过调用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()));
final Map result=Arrays.stream(style.split(“;”))
.map(字符串::trim)
.map(s->s.split(“:”)
.filter(a->a.length==2)
.collect(Collectors.toMap(a->a[0].trim(),a->a[1].trim());
我删除了冗余的s->s.split(“:”).length>1
检查,因为过滤器已经消除了没有足够元素的数组
我还假设过滤器应该要求数组正好有2个元素。要将我的注释放入答案,而不是不断调用s.split(“:”)
,只需将其作为管道的一部分,如下所示:
final Map<String, String> result = Arrays.stream(style.split(";")) //
.map(String::trim)
.map(s->s.split(":")) //
.filter(s -> s.length <= 2) //
.collect(Collectors.toMap(s -> s[0].trim(),
s -> s.length > 1 ? s[1] : ""));
final Map result=Arrays.stream(style.split(“;”))//
.map(字符串::trim)
.map(s->s.split(“:”)//
.filter(s->s.length s[0]。修剪(),
s->s.length>1?s[1]:“”);
如果这正是您所担心的,只需在流中添加另一个.map(s->s.split(“:”)
。然后在流的其余部分观察到的对象将是s.split(“:”
的值,而不是s
我真是个笨蛋。它应该是“s.length<2”。Thanks@user871611如果s.length<2,则s[1]将无效。也许你的意思是s.length==2
@Eran:你说得对。我更新了我的问题。将其更改为.filter(s->s.split(“:”)。长度您假设的方向正确。我问题中的过滤器应该是”。filter(s->s.split(“:”).length<2)
@user871611实际上它应该是长度==2
,否则收集(Collectors.toMap())
step将始终生成一个null
值,因为s.split(“:”).length>1
永远不会为真。你是对的。我更新了我的问题。将其更改为.filter(s->s.split(:”).length