Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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 Stream.map三元运算符_Java_Java Stream - Fatal编程技术网

Java Stream.map三元运算符

Java Stream.map三元运算符,java,java-stream,Java,Java Stream,我有一个TXT.文件,其中的行表示一些对象 R线(一条) RN线(1…多个) 它们通过id连接,因此为了读取文件,我制作了一个lines().stream Stream<Boolean> inLines = in.lines() //limit lines due to memory footprint .limit(10) //filter each line by the given id .filter(ide

我有一个TXT.文件,其中的行表示一些对象

R线(一条)

RN线(1…多个)

它们通过id连接,因此为了读取文件,我制作了一个
lines().stream

Stream<Boolean> inLines = in.lines()
         //limit lines due to memory footprint
        .limit(10)
         //filter each line by the given id
        .filter(identN -> ident.matches(".*\\t[5]\\t.*"))
        /**
         * should return all lines with id 5
         * if line starts with RN put it in rnArray else in rArray so the objects are connected but i need for validation purposes each line seperate??
         */
        .map(y -> (y.startsWith("RN") ? synonym1.add(y) : substance.add(y)));
         

System.out.println("syn1 = " + synonym1.toString() + "substance: = " + substance + " InLines"+ inLines);
但它不起作用。.map的返回应该是另一个流,因此,如果我对每个流都使用该逻辑,那么如何合并该逻辑呢?因为我还需要r行,所以它不起作用。

原因 响应为空,因为您创建的
流(
内联线
)上没有调用终端操作。因此,
synonym1
substance
在打印到控制台时,当您尝试访问它们时,它们都保持为空

候补 您可能只是想用一个
forEach
来替换最后的
map
操作,因为它将同时保留找到的
synonym1
substance
类型的元素,这些元素似乎是您的主要用例。这可以通过以下方式实现:

.forEach(y -> {
    if (y.startsWith("RN")) {
        synonym1.add(y);
    } else {
        substance.add(y);
    }
});

目前,将
收集到
集合
中没有多大意义,因为这将包括
的结果。为每个过滤元素在
同义词1
物质
集合上添加
操作。

谢谢@Naman,这对我有很大帮助,因为我找到了一种方法,允许我也使用三元运算符,并通过分组将流拆分为两个单独的列表

 .forEach((x) -> ((x.startsWith("RN"))?synonym:substance).add(x));
所以问题是x运算符不在括号内,我想是因为 分组对象或是否有其他解释


谢谢

好的,谢谢你所说的终端操作是什么意思?三元也不能使用吗?为什么?@MicroLova要了解终端操作的含义,请参阅。应使用三元运算,但只有在未来的运算中需要它们的返回值时才使用。根据我的理解,三元运算是返回值,if/else只是一个不返回任何值的块。谢谢,非常有用。注意:你的意思是如果我使用collect()-方法,那么它将包括同义词1和substance.adds到收集器。toList collection?@MicroLova
add
方法有一个
Boolean
返回类型,用于成功添加到集合中。我的意思是,如果您收集该列表,则该列表将具有与
add
操作相对应的布尔值。
 .forEach((x) -> ((x.startsWith("RN"))?synonym:substance).add(x));