如何在java中拆分Map项?

dfuffjeb  于 2021-08-20  发布在  Java
关注(0)|答案(2)|浏览(293)

我有一个生成json的Map,如下所示

{
    "item": {
        "Đã đặt cọc": 0,
        "Chờ duyệt": 0,
        "Mới tạo": 0,
        "Đang đặt hàng": 0,
        "Đang VC TQ-VN": 0,
        "Đang phát hàng": 0,
        "Đã nhận được hàng": 0,
        "Đã hủy": 0
    },
    "name": "Đơn mua hộ"
}

我想把它分成两部分

{
    "item": [
        {
            "name": "Đã đặt cọc",
            "count": "0"
        },
        {
            "name": "Chờ duyệt",
            "count": "0"
        },
         ...
    ],
    "name": "Đơn kí gửi"
}

我试过这个代码,但没用

...
HashMap<String, Object> itemSell = new HashMap<>();
// Order Sell
orderSell.put("name", "Đơn mua hộ");
for (Map.Entry<String, Long> pair : reportsStaticSellEcomos.entrySet()) {
     itemSell.put("name", pair.getKey());
     itemSell.put("count", pair.getValue());
     orderSell.put("item", itemSell);
}
summary.add(orderSell);

上面的代码产生了这样的结果

{
                "item": {
                    "name": "Đã hủy",
                    "count": 0
                },
                "name": "Đơn mua hộ"
            }

是的,它只显示1项。
请帮我弄到所有的,不仅仅是1个

h5qlskok

h5qlskok1#

您的项目必须是 itemSell 不是单个元素。
试试这个

// Order Sell
orderSell.put("name", "Đơn mua hộ");
List<HashMap<String, Object>> items = new ArrayList<>(reportsStaticSellEcomos.entrySet().size());
for (Map.Entry<String, Long> pair : reportsStaticSellEcomos.entrySet()) {
     HashMap<String, Object> itemSell = new HashMap<>();
     itemSell.put("name", pair.getKey());
     itemSell.put("count", pair.getValue());
     items.add(itemSell);
}
orderSell.put("item", items);
summary.add(orderSell);

另外,使用 HashMap<String, Object> 代表你的 Item 效率不高,也不容易理解。相反,我建议您创建一个类 Item 您可以在其中封装这些字段。

public class Item {
  private final String name;
  private final int count;
  // constructor
  // equals and hashcode
  // getter, setter
}
jecbmhm3

jecbmhm32#

循环会重复覆盖itemsellMap的“name”和“count”键。您想在这里使用列表。

...
// Order Sell
orderSell.put("name", "Đơn mua hộ");
List<Map<String, Object>> itemList = new ArrayList<>();
for (Map.Entry<String, Long> pair : reportsStaticSellEcomos.entrySet()) {
    Map<String, Object> itemSell = new HashMap<>();
    itemSell.put("name", pair.getKey());
    itemSell.put("count", pair.getValue());
    itemList.add(itemSell);
}
orderSell.put("item", itemList);
summary.add(orderSell);

您可能还想看看jackson,它可以根据类结构自动完成这类工作。

class Order {
    String name;
    List<Item> items;
}

...

class Item {
    String name;
    Integer count;
}

...

Order order = ...;
objectMapper.writeValueAsString(order);

相关问题