首页 > 解决方案 > Java 流 groupby 并同时加入以进行 csv 导出

问题描述

我有一个字符串列表:“blue”“red”“blue”“yellow”

我想流式传输它并得到这个结果:

"蓝色;2\n红色;1\黄色;1"

这样我就得到了颜色的 csv,并计算了它们的出现次数。

到目前为止,我很难让所有工作都正常工作,这就是我所拥有的:

 public static void main(String[] args) {
        System.out.println(
                List.of("blue", "red", "blue", "yellow")
                        .stream()
                        .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
        );
// result: {red=1, blue=2, yellow=1}
    }

标签: javajava-stream

解决方案


只需流式传输生成的条目,并根据需要连接它们:

String output = Stream.of("blue", "red", "blue", "yellow")
        .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
        .entrySet()
        .stream()
      //.sorted(Comparator.comparing(Entry::getValue).reversed())
        .map(e -> e.getKey() + ";" + e.getValue())
        .collect(Collectors.joining("\n"));

不清楚订单是否是一项要求,但您可以取消注释该sorted行以获得更高的计数。

请注意,这不处理引用、转义等。如果您需要任何更复杂的 CSV 逻辑,您可能需要使用库。


推荐阅读