为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕丝7291255 2023-09-27 10:34:12
如果我有一个制表符分隔的文件,当我使用该BufferedReader对象时,我可以使用 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我需要创建一个对象或像嵌套数组一样的 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 Api 创建一个 Map,所以我认为我想要的方式是不可能的,所以我可以创建一个 while lop 并创建你认为的对象?
查看完整描述

1 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

最好的办法是将列表正确识别为字符串列表,并且不要使用原始列表。

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

然后你将得到一个列表列表,为此使用 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。

希望这对您有帮助!


查看完整回答
反对 回复 2023-09-27
  • 1 回答
  • 0 关注
  • 83 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信