如何在没有 POJO 类方法的 java 流中使用 Collectors.groupingBy

我正在读取单个 csv 文件(大小约为 700 MB,有 103415834 行)并尝试检索具有某些特定值的所有行。如果它只有 1 个条目,我可以检索该行,但如果它有超过 1 个条目则不能。下面是我的代码,它适用于 1 个条目。


    try (Stream<String> stream = Files.lines(Paths.get(IN_FILE_PATH))) {


        int nameIndex = columns.indexOf("Rate");


        Stream<String> stream1 = Files.lines(Paths.get(IN_FILE_PATH));


        List<List<String>> values = stream1

                .skip(1)

                .map((line) -> Arrays.asList(line.split(",")))

                .filter(list -> list.get(nameIndex).equals("25"))

                .collect(Collectors.toList());


        System.out.println(values.size());

        values.forEach((l) -> System.out.println(l));


    } catch (IOException e1) {

        e1.printStackTrace();

    }

尝试解析的 csv 文件的示例行如下:


MD,URN,PremiseType,Rate,OHP 09022,null,Residential,14,null 38329,1428275,Residential,14,null 38742,563459,Single,21,111



素胚勾勒不出你
浏览 107回答 1
1回答

牧羊人nacy

这是按Rate(arr[3]) 分组,但您可以按所需的任何字段分组:Map<String, List<String>> map = Files.lines(Paths.get(IN_FILE_PATH))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .skip(1)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .map(line -> line.split(","))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .collect(groupingBy(arr -> arr[3],&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mapping(strings -> String.join(" ", strings), toList())));结果中的键map是您分组的字段(在本例中为速率),值(List<String>)是具有相同速率的行列表。希望这有帮助
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java