避免在Lambda中进行冗余函数调用

use*_*611 2 java lambda

我正在尝试将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)

Era*_*ran 5

您可以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个元素.