首页 > 解决方案 > 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

现在我可以按顺序处理流中的每个元素。我想读取“订单”流中的每个元素作为订单的单位

如何从行 -> 订单流式传输?

--

标签: javajava-streamgrouping

解决方案


这样的事情怎么样。每个地图值都是一个列表。关键是破折号左边的值-

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());

推荐阅读