java - 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}
}
解决方案
只需流式传输生成的条目,并根据需要连接它们:
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 逻辑,您可能需要使用库。
推荐阅读
- c# - ASP.net 核心 RegularException 属性 - 多个条件
- c# - 为什么我不能在构造函数中设置这个只读属性?
- javascript - 使用 lodash 对翻转函数进行柯里化 - 有限制吗?
- coq - 在 Coq 中匹配假设的更短的符号?
- android - 无法解析符号“FirebaseListAdapter”
- php - 在视图页面和数据表中显示以数组形式上传的多个图像
- php - SQL注入认证绕过问题
- java - 如何处理带和不带区域的日期
- events - 尝试阻止默认值时使用自定义 keydown 事件键入错误
- php - 长文本字段的Mysql查询不返回任何内容