java - java 将大块订单行转换成订单
问题描述
我有一连串的订单
Stream<String> lines=Stream.of("100-1","100-2","100-3",
"120-1",
"333-1","333-2"); // .. millions of lines
现在我想将它们分块/映射/分组到一个流中
Stream<List<String>> orders=Stream.of(
Arrays.asList("100-1","100-2","100-3"),
Arrays.asList("120-1"),
Arrays.asList("333-1","333-2")); // .. thousands of orders
现在我可以按顺序处理流中的每个元素。我想读取“订单”流中的每个元素作为订单的单位
如何从行 -> 订单流式传输?
- 我不想在看到“订单”之前收集整个“行”流
- 我不想看地图
- 我不在乎订单“100”可能会在 100.000 个元素之后再次出现.. 因为那没有发生
--
- 我已经阅读/尝试了很多关于“foo”的分组和超级有趣的文章。
- 我需要做对。
- 在示例中,为了简单起见,我将 OrderLine 显示为字符串“100-2”。它是带有订单号字段、订单行字段等带有 getter 的真实对象。
解决方案
这样的事情怎么样。每个地图值都是一个列表。关键是破折号左边的值-
。
Map<String, List<String>> orders = Stream
.of("100-1", "100-2", "100-3", "120-1", "333-1",
"333-2")
.collect(Collectors.groupingBy(order -> order
.substring(0, order.indexOf("-"))));
orders.entrySet().forEach(System.out::println);
印刷
100=[100-1, 100-2, 100-3]
333=[333-1, 333-2]
120=[120-1]
所以你可以这样做。
List<String> order100 = orders.get("100");
System.out.println(order100);
印刷
[100-1, 100-2, 100-3]
如果您不想处理地图,而只想列出订单列表,则可以从地图中获取。
List<List<String>> lists =
orders.values().stream().collect(Collectors.toList());
推荐阅读
- reactjs - 在 React Router Breadcrumb 组件中重命名 URL'name
- machine-learning - 可分离卷积层的 layer.get_weights() 是什么意思?
- python - ABC 拒绝我的子类,尽管它没有抽象方法
- css - 我们如何为“ngx-star-rating”赋予颜色?
- php - 在 WooCommerce 中添加不含税价格的自定义订单元数据
- amazon-s3 - 如何从 S3 存储桶 URL 上传媒体
- ubuntu - Ubuntu libc 混淆
- django - 为什么在验证失败后存储名字和姓氏字段哪个密码不
- django - 在 Django 测试客户端中将属性设置为请求
- javascript - React Native,navigation.navigate 不是函数