将字符串序列转换为URI的有效方法

时间:2014-12-23 04:32:56

标签: java lambda java-8 java-stream

这是How to map strings to URIs?

的后续问题

我有String个以空格分隔的URI。

http://...[sp]http://...[sp]http://...

我正在尝试拆分它,最后将它们收集到List

到目前为止,我写了以下代码。

final List<URI> uris = Stream.of(string.split("\\s"))
    .distinct()
    .filter(s -> s.isEmpty())
    .map(s -> {
        try {
            return new URI(s);
        } catch (final URISyntaxException urise) {
            return null;
        }
    })
    .filter(uri -> uri != null)
    .collect(Collectors.toList());

我的问题是,

  1. 是否由URI构造函数创建null并且后续过滤是不可避免的?
  2. 有没有更有效的方法呢?

1 个答案:

答案 0 :(得分:1)

这应该足够了:

List<URI> uris = Stream.of(string.split("\\s+")).map(URI::create).collect(
    Collectors.toList());

如果遇到任何无效输入,它将抛出异常,但我认为应该暴露错误,而不是悄悄地抑制错误。