【问题标题】:Java Stream map or create new object of a FileStreamJava Stream 映射或创建 FileStream 的新对象
【发布时间】:2019-10-04 23:32:08
【问题描述】:

如果我有一个制表符分隔的文件,当我使用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

我需要像嵌套数组一样创建一个 Object 或 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 创建一个地图,所以我认为我想要的方式是不可能的,所以我可以创建一个 while lop 并创建你认为的对象?

【问题讨论】:

  • 您使用的是原始List

标签: java java-stream filereader


【解决方案1】:

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

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

然后您将拥有一个列表列表,为此使用 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。

希望对你有帮助!

【讨论】:

  • 是的,这对我帮助很大。一个问题是您会继续使用 Substance rObject = new Subtance(list.get(0),...) 构建对象,还是通过流和 . map(a ->new Substance(a[0]...顺便说一句,使用 String[] arr 和 List arr 有什么区别,您都通过索引访问对象?
  • R-Object 和 RN 对象也都通过 Id 链接,所以如果您需要使用 rObject 和 rnObject1 进行输出,您会创建一个 Map 还是只是松散?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-07
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多