如果我有一個(gè)制表符分隔的文件,當(dāng)我使用該BufferedReader對(duì)象時(shí),我可以使用 Stream Api,如過濾器、映射、減少等方法,因此如果 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我需要?jiǎng)?chuàng)建一個(gè)對(duì)象或像嵌套數(shù)組一樣的 MAP (Header, rObject (rnObject,rnObject)),那么我可以使用 Stream API 來執(zhí)行此操作嗎?我已經(jīng)嘗試過了 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 Api 創(chuàng)建一個(gè) Map,所以我認(rèn)為我想要的方式是不可能的,所以我可以創(chuàng)建一個(gè) while lop 并創(chuàng)建你認(rèn)為的對(duì)象?
1 回答

慕虎7371278
TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超4個(gè)贊
最好的辦法是將列表正確識(shí)別為字符串列表,并且不要使用原始列表。
由于拆分的結(jié)果是一個(gè)字符串?dāng)?shù)組,因此您必須將其包裝為列表。
然后你將得到一個(gè)列表列表,為此使用 flatMap 將所有列表合并為一個(gè)唯一的列表,然后你將能夠使用收集器并將其存儲(chǔ)在單個(gè)列表中。
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());
您的示例的主要問題是您正在存儲(chǔ)數(shù)組對(duì)象的原始列表。因此,當(dāng)您在數(shù)組中調(diào)用 toString() 時(shí),您會(huì)得到以方括號(hào)開頭的 hashReference。
希望這對(duì)您有幫助!
添加回答
舉報(bào)
0/150
提交
取消