Java 我可以在单个流中进行拆分和筛选吗?
我正试着做以下事情 我有以下模式的字符串列表:Java 我可以在单个流中进行拆分和筛选吗?,java,java-stream,Java,Java Stream,我正试着做以下事情 我有以下模式的字符串列表: John,Peter,Carl Rose,Joanne,Natalie 目前我正在逐行阅读并输出一条流 像这样: Files.lines(myfile).toURI())) 这将返回一个流 我知道我可以将它们收集到一个列表中,但我想知道在这个流中我是否可以拆分并执行更多的逻辑 我尝试分割每一行并过滤,以防三个预期字段中的任何一个为空,这可能吗 目前,我用的是这样的“老办法”: List<TripleNames> validValu
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]);
}
}
List validvalue=new ArrayList();
对于(字符串值:值){//值表示以逗号分隔的每一行
最后一个字符串[]name=line.split(“,”);
if(StringUtils.isNotBlank(名称[0])&&StringUtils.isNotBlank(名称[1]){
add(新的三元组(名称[0],名称[1],名称[2]);
}
}
有什么想法吗?在收集到以下列表之前,您可能正在寻找
映射
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());
List validValues=values.stream()
.map(直线->直线分割(“,”)
.filter(名称->StringUtils.isNotBlank(名称[0])&StringUtils.isNotBlank(名称[1]))
.map(名称->新的三元组名称(名称[0]、名称[1]、名称[2]))
.collect(Collectors.toList());
如果您想要一种检查所有拆分项目的简单方法,您可以使用:
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());
List validValues=values.stream()
.map(直线->直线分割(“,”)
.filter(名称->数组.stream(名称).allMatch(StringUtils::isNotBlank))
.map(名称->新的三元组名称(名称[0]、名称[1]、名称[2]))
.collect(Collectors.toList());
您还可以在
.map(String::trim)
之前使用.allMatch()
在所有名称的开头和结尾切割空格,如果这样有帮助的话。您还需要检查名称[2]
是否空白。您可以使用StringUtils#isnonebank
一次检查所有名称。