Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我可以在单个流中进行拆分和筛选吗?_Java_Java Stream - Fatal编程技术网

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
一次检查所有名称。