我正在尝试执行以下操作。...
我在以下模式下有一个字符串列表:
John,Peter,Carl
Rose,Joanne,Natalie
此刻我正在逐行阅读并输出流...
赞:
Files.lines(myfile).toURI()))
这将返回一个流。
我知道我可以将它们收集到一个列表中,但是我想知道是否可以在此流中拆分并执行更多逻辑?
如果三个预期字段中的任何一个为空,我会尝试将每一行拆分并过滤,这有可能吗?
此刻,我以这种“旧方式”拥有它:
List<TripleNames> validValues = new ArrayList();
for(String value:values) { //values represent each line comma separated
final String[] names = line.split(",");
if (StringUtils.isNotBlank(names[0]) && StringUtils.isNotBlank(names[1]).... {
validValues.add(new TripleNames(names[0], names[1], names[2]);
}
}
有什么想法吗?
答案 0 :(得分:2)
在以以下方式收集到列表之前,您可能正在寻找map
ping:
List<TripleNames> validValues = values.stream()
.map(line -> line.split(","))
.filter(names -> StringUtils.isNotBlank(names[0]) && StringUtils.isNotBlank(names[1]))
.map(names -> new TripleNames(names[0], names[1], names[2]))
.collect(Collectors.toList());
答案 1 :(得分:0)
如果您想要一种简单的方法来检查所有拆分项目,则可以使用:
Arrays.stream(names).allMatch(StringUtils::isNotBlank)
代替在条件中分别检查每个项目。
这是完整的示例:
List<String> validValues = values.stream()
.map(line -> line.split(","))
.filter(names -> Arrays.stream(names).allMatch(StringUtils::isNotBlank))
.map(names -> new TripleNames(names[0], names[1], names[2]))
.collect(Collectors.toList());
如果有帮助,您也可以在.map(String::trim)
之前使用.allMatch()
来剪切所有名称的开头和结尾的空格。