Слияние 2 списка в Java на основе соответствия значения ключа - PullRequest
0 голосов
/ 19 февраля 2019

Я хочу объединить список 1 и список 2 для получения ожидаемого результата, как показано ниже.

Оба списка являются классами Java и также хотят добавить в новый класс Java наожидаемая структура.

Я пробовал циклически проходить через List1 и List2, но безрезультатно.

Также пытался использовать лямбда-выражения, но не смог получить ожидаемый результат.

Опубликует код, который я попробовал.

Любая помощь будет высоко оценена.

Список 1 (младший):

{
“One”: [
    "G13DA"
],
“Two”: [
    "G13AA",
    "G13AD"
]
}

Список 2:

[
{
    "subgroupCode": "G13AA",
    "productGroup": [
        {
            "productCode": "G1A",
            "productDescription": “Two 1"
        },
        {
            "productCode": "G9B",
            "productDescription": “Two 2"
        }
    ]
},
{
    "subgroupCode": "G13AD",
    "productGroup": [
        {
            "productCode": "G4A",
            "productDescription": “Two 3”
        },
        {
            "productCode": "G9C",
            "productDescription": “Two 4”
        }
    ]
},
{
    "subgroupCode": "G13DA",
    "productGroup": [
        {
            "productCode": "G5M",
            "productDescription": “One 1"
        },
        {
            "productCode": "G9M",
            "productDescription": “One 2"
        }
    ]
}
]

Ожидаемый результат:

{
   "juniorArea": [   
{      
 "juniorAreaDescription": “One”,
          "mechandisingGroup": [
         {
                "productCode": "G5M",
                "productDescription": “One 1"
         },
         {
                "productCode": "G9M",
                "productDescription": “One 2"
         }
      ]
    },
    {
      "juniorAreaDescription": “Two”,
      "mechandisingGroup": [
         {
                "productCode": "G1A",
                "productDescription": “Two 1"
         },
         {
                "productCode": "G9B",
                "productDescription": “Two 2"
         },
     {
                "productCode": "G4A",
                "productDescription": “Two 3”
         },
         {
                "productCode": "G9C",
                "productDescription": “Two 4”
         }
      ]
    }
  ]
}

1 Ответ

0 голосов
/ 20 февраля 2019

Вам нужно будет использовать библиотеку Google gson для анализа ваших строк json, а также создать дополнительные классы для хранения данных для них.Сохраните вашу строку json в файлах, чтобы прочитать содержимое и преобразовать их в соответствующие объекты.

Упомянутые вами строки JSON содержат ошибку, так как вы используете («) во многих местах.Замените их на (") во всех местах. Это изменение очень важно, потому что, если вы этого не сделаете, вы можете получить исключения или нежелательные выходные данные.

Сохраните строки Json следующим образом:

List1.txt

{
"One": [
    "G13DA"
],
"Two": [
    "G13AA",
    "G13AD"
]
}

List2.txt

[
{
    "subgroupCode": "G13AA",
    "productGroup": [
        {
            "productCode": "G1A",
            "productDescription": "Two 1"
        },
        {
            "productCode": "G9B",
            "productDescription": "Two 2"
        }
    ]
},
{
    "subgroupCode": "G13AD",
    "productGroup": [
        {
            "productCode": "G4A",
            "productDescription": "Two 3"
        },
        {
            "productCode": "G9C",
            "productDescription": "Two 4"
        }
    ]
},
{
    "subgroupCode": "G13DA",
    "productGroup": [
        {
            "productCode": "G5M",
            "productDescription": "One 1"
        },
        {
            "productCode": "G9M",
            "productDescription": "One 2"
        }
    ]
}
]

Вам потребуется изменить пути к файлам этих двух файлов во время работы программы

Добавить следующие классы

JuniorArea.class

public class JuniorArea {
    private String juniorAreaDescription;
    private List<MerchandisingGroup> mechandisingGroup;

    public String getJuniorAreaDescription() {
        return juniorAreaDescription;
    }
    public void setJuniorAreaDescription(String juniorAreaDescription) {
        this.juniorAreaDescription = juniorAreaDescription;
    }
    public List<MerchandisingGroup> getMechandisingGroup() {
        return mechandisingGroup;
    }
    public void setMechandisingGroup(List<MerchandisingGroup> mechandisingGroup) {
        this.mechandisingGroup = mechandisingGroup;
    }

    @Override
    public String toString() {
        return "JuniorArea [juniorAreaDescription=" + juniorAreaDescription + ", mechandisingGroup=" + mechandisingGroup
                + "]";
    }
} 

JuniorAreaCollection.class

public class JuniorAreaCollection {
    private List<JuniorArea> juniorArea;

    public List<JuniorArea> getJuniorArea() {
        return juniorArea;
    }

    public void setJuniorArea(List<JuniorArea> juniorArea) {
        this.juniorArea = juniorArea;
    }

    @Override
    public String toString() {
        return "JuniorAreaCollection [juniorArea=" + juniorArea + "]";
    }
}

MerchandisingGroup.class

public class MerchandisingGroup {
    private String productCode;
    private String productDescription;

    public String getProductCode() {
        return productCode;
    }
    public void setProductCode(String productCode) {
        this.productCode = productCode;
    }
    public String getProductDescription() {
        return productDescription;
    }
    public void setProductDescription(String productDescription) {
        this.productDescription = productDescription;
    }

    @Override
    public String toString() {
        return "MechandisingGroup [productCode=" + productCode + ", productDescription=" + productDescription + "]";
    }
}

Product.class

public class Product {
    private String subgroupCode;
    private List<ProductGroup> productGroup;

    public String getSubgroupCode() {
        return subgroupCode;
    }
    public void setSubgroupCode(String subgroupCode) {
        this.subgroupCode = subgroupCode;
    }
    public List<ProductGroup> getProductGroup() {
        return productGroup;
    }
    public void setProductGroup(List<ProductGroup> productGroup) {
        this.productGroup = productGroup;
    }

    @Override
    public String toString() {
        return "Product [subgroupCode=" + subgroupCode + ", productGroup=" + productGroup + "]";
    }
}

ProductGroup.class

public class ProductGroup {
    private String productCode;
    private String productDescription;

    public String getProductCode() {
        return productCode;
    }
    public void setProductCode(String productCode) {
        this.productCode = productCode;
    }
    public String getProductDescription() {
        return productDescription;
    }
    public void setProductDescription(String productDescription) {
        this.productDescription = productDescription;
    }

    @Override
    public String toString() {
        return "ProductGroup [productCode=" + productCode + ", productDescription=" + productDescription + "]";
    }
}

Наконец, запустите следующий код основного класса, чтобы проверить вывод

public class MainRunner {
    // Use Path according to your file system
    private static String List1Path = "/List1.txt";

    // Use Path according to your file system
    private static String List2Path = "/List2.txt";

    public static void main(String...arg) throws UnsupportedEncodingException, IOException {
        Gson gson = new GsonBuilder().setPrettyPrinting().create();

        String List1Content = new String(Files.readAllBytes(Paths.get(List1Path)), "UTF-8");

        Map<String, List<String>> map = new HashMap<>();

        map = gson.fromJson(List1Content, new TypeToken<Map<String, List<String>>>() {}.getType());

        System.out.println(map);

        String List2Content = new String(Files.readAllBytes(Paths.get(List2Path)), "UTF-8");

        List<Product> products = gson.fromJson(List2Content, new TypeToken<List<Product>>() {}.getType());

        System.out.println(products);

        List<JuniorArea> juniorAreas = new ArrayList<>();

        for (String s : map.keySet()) {
            JuniorArea juniorArea = new JuniorArea();

            juniorArea.setJuniorAreaDescription(s);

            List<MerchandisingGroup> merchandisingGroups = new ArrayList<>();

            List<String> subgroupCodes = map.get(s);

            for (String subgroupCode : subgroupCodes) {

                for (Product product : products) {

                    if (product.getSubgroupCode().equals(subgroupCode)) {
                        List<ProductGroup> productGroups = product.getProductGroup();

                        for (ProductGroup productGroup : productGroups) {
                            MerchandisingGroup merchandisingGroup = new MerchandisingGroup();

                            merchandisingGroup.setProductCode(productGroup.getProductCode());
                            merchandisingGroup.setProductDescription(productGroup.getProductDescription());

                            merchandisingGroups.add(merchandisingGroup);
                        }
                    }

                }

            }

            juniorArea.setMechandisingGroup(merchandisingGroups);

            juniorAreas.add(juniorArea);
        }

        JuniorAreaCollection collection = new JuniorAreaCollection();

        collection.setJuniorArea(juniorAreas);

        System.out.println(gson.toJson(collection));
    }
}

Вывод должен быть напечатан на вашей консоли

{
  "juniorArea": [
    {
      "juniorAreaDescription": "One",
      "mechandisingGroup": [
        {
          "productCode": "G5M",
          "productDescription": "One 1"
        },
        {
          "productCode": "G9M",
          "productDescription": "One 2"
        }
      ]
    },
    {
      "juniorAreaDescription": "Two",
      "mechandisingGroup": [
        {
          "productCode": "G1A",
          "productDescription": "Two 1"
        },
        {
          "productCode": "G9B",
          "productDescription": "Two 2"
        },
        {
          "productCode": "G4A",
          "productDescription": "Two 3"
        },
        {
          "productCode": "G9C",
          "productDescription": "Two 4"
        }
      ]
    }
  ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...