假设我有一个字符串/对象,其中某些数据采用管道分隔格式,如下所示
***Input:***
TIMESTAMP|COUNTRYCODE|RESPONSETIME|FLAG
1544190995|US|500|Y
1723922044|GB|370|N
1711557214|US|750|Y
我想读取此字符串/对象并根据特定的列名过滤数据(假设为TIMESTAMP和FLAG)。 并返回/显示输出,如下所示-
***Output:***
TIMESTAMP|FLAG
1544190995|Y
1723922044|N
1711557214|Y
我尝试使用以下代码:
首先,我需要将标头名称存储在数组中:
headerArray[] = {TIMESTAMP, FLAG}
通过将headerArray[]
与输入的第一行进行比较,我得到了输入中指定列标题的索引:
headerIndex[] = {0, 3}
然后尝试使用以下代码过滤并获取指定的列和值:
return br.lines()
.skip(1) // skip headers
.map(s -> s.split("|"))
.filter(a -> a[0] && a[3])
.collect(Collectors.toList());
注意:我有超过一百万行的管道分隔值。我想在单个对象中返回所有过滤出的列值。我想通过返回值作为列表是不可能的。
答案 0 :(得分:2)
您遇到一些问题:
首先,您应该将split
的模式更改为\\|
,并且可以map
代替过滤器来创建新字符串。
br.lines().skip(1) // skip headers
.map(s -> s.split("\\|"))
.map(a -> String.join("|", a[0], a[3]))
.collect(toList())