如何对字符串数组列表、java 8 或 java 11 进行分组

{username,order} 尝试按用户名对它们进行分组。


List<String[]> orders = new ArrayList<>();

            String[] o1 = {"john, apple"};

            String[] o2 = {"john, Orange"};

            String[] o3 = {"jane , banana"};

            String[] o4 = {"jane, Orange"};

            orders.add(o1);

            orders.add(o2);

            orders.add(o3);

            orders.add(o4);

可以说如果我有以下订单并且我想得到这个


List<List<String[]>> groupedOrders = new ArrayList<>();

    groupedOrders.add(Arrays.asList(o1,o2));

    groupedOrders.add(Arrays.asList(o3,o4));

所以我正在寻找的结果是groupedOrders,就像上面的一个或在地图中一样,只要订单列表分组在一起如何将上面的订单列表转换为groupOrders,我曾尝试使用地图或流但不能让它工作。


沧海一幻觉
浏览 198回答 2
2回答

慕娘9325324

我建议不要通过使用自定义类来使用数组:class Order {&nbsp; &nbsp; String username;&nbsp; &nbsp; String order;}我省略了 getter、setter、修饰符和构造函数,因为这两个字段是该类的主要组成部分。然后,您可以在List<Order> orders其中添加所有订单,从那里按名称对它们进行分组相当容易:Map<String, List<Order>> grouped = orders.stream()&nbsp; &nbsp; .collect(Collectors.groupingBy(Order::getUsername));如果你只想要实际的订单,比如banana,apple等等,你可以使用这个:Map<String, List<String>> grouped = orders.stream()&nbsp; &nbsp; .collect(Collectors.groupingBy(&nbsp; &nbsp; &nbsp; &nbsp; Order::getUsername,&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Collectors.mapping(Order::getOrder, Collectors.toList())&nbsp; &nbsp; ));如果你真的想使用数组作为你的输入,你也可以使用这个:Map<String, List<String>> grouped = Arrays.stream(orders)&nbsp; &nbsp; .collect(Collectors.groupingBy(&nbsp; &nbsp; &nbsp; &nbsp; a -> a[0],&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Collectors.mapping(a -> a[1], Collectors.toList())&nbsp; &nbsp; ));

互换的青春

请注意,您的数组String[] o1 = {"john, apple"};只有 1 个元素,您可能需要类似{"john", "apple"}.&nbsp;注意报价。我也会推荐@Lino 的解决方案,但它可以用数组来完成:Map<String,&nbsp;List<String[]>>&nbsp;map&nbsp;=&nbsp;orders.stream() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.collect(Collectors.groupingBy(s&nbsp;->&nbsp;s[0]));
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java