【发布时间】:2015-10-07 15:05:06
【问题描述】:
我有一行需要解析,如下所示:
@UNIT,a,b,c,,,,d,e,,,
我希望 Java 将以下值存储在一个列表中:
[0] => a
[1] => b
[2] => c
[3] => null
[4] => null
[5] => null
[6] => d
[7] => e
[8] => null
[9] => null
[10] => null
我想用逗号分隔值并将空值替换为null。
我用以下代码归档了大部分部分:
metaObject.unit = Arrays.stream(line
.split(","))
.skip(line.startsWith("@UNIT,") ? 1 : 0)
.map(String::trim)
.map(s -> " ".equals(s) || "".equals(s) || "_".equals(s)? null : s)
.collect(Collectors.toList());
其中metaObject.unit 定义为List<String> unit = new ArrayList<String>();
问题在于 Java 忽略了最后一个非空元素之后出现的空元素。我在给定情况下得到的输出是:
[0] => a
[1] => b
[2] => c
[3] => null
[4] => null
[5] => null
[6] => d
[7] => e
我不明白为什么 Java 不像以前那样威胁空元素。有什么技巧可以解决这个问题吗?
【问题讨论】:
标签: java lambda java-8 java-stream