亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何對字符串數組列表、java 8 或 java 11 進行分組

如何對字符串數組列表、java 8 或 java 11 進行分組

滄海一幻覺 2022-07-06 18:45:49
{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,我曾嘗試使用地圖或流但不能讓它工作。
查看完整描述

2 回答

?
慕娘9325324

TA貢獻1783條經驗 獲得超4個贊

我建議不要通過使用自定義類來使用數組:


class Order {

    String username;

    String order;

}

我省略了 getter、setter、修飾符和構造函數,因為這兩個字段是該類的主要組成部分。


然后,您可以在List<Order> orders其中添加所有訂單,從那里按名稱對它們進行分組相當容易:


Map<String, List<Order>> grouped = orders.stream()

    .collect(Collectors.groupingBy(Order::getUsername));

如果你只想要實際的訂單,比如banana,apple等等,你可以使用這個:


Map<String, List<String>> grouped = orders.stream()

    .collect(Collectors.groupingBy(

        Order::getUsername, 

        Collectors.mapping(Order::getOrder, Collectors.toList())

    ));

如果你真的想使用數組作為你的輸入,你也可以使用這個:


Map<String, List<String>> grouped = Arrays.stream(orders)

    .collect(Collectors.groupingBy(

        a -> a[0], 

        Collectors.mapping(a -> a[1], Collectors.toList())

    ));


查看完整回答
反對 回復 2022-07-06
?
互換的青春

TA貢獻1797條經驗 獲得超6個贊

請注意,您的數組String[] o1 = {"john, apple"};只有 1 個元素,您可能需要類似{"john", "apple"}. 注意報價。

我也會推薦@Lino 的解決方案,但它可以用數組來完成:

Map<String, List<String[]>> map = orders.stream()
            .collect(Collectors.groupingBy(s -> s[0]));


查看完整回答
反對 回復 2022-07-06
  • 2 回答
  • 0 關注
  • 226 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號