Java 流映射或创建 FileStream 的新对象

Java Stream map or create new object of a FileStream

如果我有一个制表符分隔的文件,当我使用 BufferedReader 对象时,我可以使用 Stream Api 方法,如 filter、map、reduce 等方法,所以如果 Stream

 //first Line is Header Identified by #
 #  SUBSTANCE   2,60    25.04.2012  00:02:48    01.01.2000  24.04.2012
 //this is my R Object which has attached two RN Objects
 R  10  -   016-053-00-8    402-460-1   0   0   0   0   0   0
 RN 10  0   DE  (C16oderC18-n-Alkyl)(C16oderC18-n-alkyl)ammonium-2-((C16oderC18-n-alkyl)(C16oderC18-n-alkyl)carbamoyl)benzolsulfonat
 RN 10  0   EN  (C16orC18-n-alkyl)(C16orC18-n-alkyl)ammonium 2-((C16orC18-n-alkyl)(C16orC18-n-alkyl)carbamoyl)benzenesulfonate

我需要像嵌套数组一样创建对象或 MAP(Header, rObject (rnObject,rnObject)),那么我可以使用 Stream API 来做到这一点吗?

我已经试过了

    BufferedReader in = new BufferedReader(new FileReader(absoluteFilePath));

    List test = in.lines().limit(4).filter(identifier -> identifier.startsWith("RN")).map(line -> line.split("\t")).collect(Collectors.toList());

很明显它没有工作,因为我得到了输出

    test.forEach(it -> System.out.println(it));
    [Ljava.lang.String;@326de728
    [Ljava.lang.String;@25618e91

所以我想我可以用 Stream 创建一个 Map Api 所以我认为我想要的方式是不可能的所以我可以创建一个 while lop 并创建你认为的对象?

最好的办法是正确识别 List 为 List of String,不要使用原始列表。

由于拆分的结果是一个字符串数组,您必须将其包装为一个列表。

然后你将得到一个列表列表,为此使用flatMap将所有列表合并成一个唯一的列表,然后你将能够使用收集器并将其存储在一个列表中。

List<String> test = in.lines().limit(4).filter(identifier -> identifier.startsWith("RN")).map(line -> Arrays.asList(line.split("\t"))).flatMap(List::stream).collect(Collectors.toList());

您的示例的主要问题是您存储的是数组对象的原始列表。因此,当您将 toString() 调用到数组中时,您会得到以方括号开头的 hashReference。

希望对您有所帮助!